繁体   English   中英

Elixir中的哈希和映射之间有什么区别

[英]What is the difference between a hash and a map in Elixir

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

入门指南

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

地图的主要优势之一是部分模式匹配:

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

上面的代码适用于包含字符串id作为键的任何映射。

如您在https://gist.github.com/BinaryMuse/bb9f2cbf692e6cfa4841所见,在OTP 18中,地图的性能有所提高。 并且HashDict将来可能会被弃用

在此答案中,有一些有关Elixir数据类型的重要信息: 关键字列表有什么好处?

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

HashDict在顶部结构上实现,而结构在顶部地图上实现。

令人迷惑的是,不推荐使用长生不老药哈希/字典的未来版本,那里只有2个数据结构图和图集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM