【问题标题】:What is the difference between a hash and a map in ElixirElixir 中的哈希和映射有什么区别
【发布时间】:2016-01-24 15:26:28
【问题描述】:

为什么 Phoenix 框架中的“参数”是映射而不是哈希? 任何人都可以解释内部实现级别的详细信息。

【问题讨论】:

  • 参数是映射,因为这将是处理此类数据结构的首选方式。 Elixir 中的哈希值仍然存在,因为地图对大型地图(目前)还没有性能。

标签: elixir phoenix-framework


【解决方案1】:

Elixir 将哈希/字典作为核心语言的一部分引入,Erlang VM 不支持哈希。下面的哈希是在地图和关键字列表(成对元组列表)之上实现的。

HashDict 在 top structs 上实现,structs 在 top maps 上实现。

令人困惑的是,elixir 哈希/字典的未来版本将被弃用,只有 2 个数据结构映射和映射集。

【讨论】:

    【解决方案2】:

    来自getting started guide

    注意:最近使用 EEP 43 将地图引入 Erlang VM。Erlang 17 提供了 EEP 的部分实现,其中仅支持“小地图”。这意味着地图只有在最多存储几十个键时才具有良好的性能特征。为了填补这一空白,Elixir 还提供了 HashDict 模块,该模块使用散列算法提供支持数十万个键的字典,性能良好。

    map 的主要优点之一是部分模式匹配:

    def edit(conn, %{"id" => id} = params)
    ...
    

    以上内容将匹配包含字符串id 作为键的任何映射。

    在 OTP 18 中,地图的性能有所提高,您可以在 https://gist.github.com/BinaryMuse/bb9f2cbf692e6cfa4841 看到。 HashDict 很可能是deprecated in the future

    在这个答案中有一些关于 Elixir 数据类型的重要信息:What is the benefit of Keyword Lists?

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2012-09-12
      • 2023-03-04
      • 2011-08-31
      • 2012-04-03
      • 2015-05-14
      相关资源
      最近更新 更多