Elixir中哈希和地图之间的区别是什么?

Pra*_*oya 2 elixir phoenix-framework

凤凰框架中的"params"为什么是地图而不是哈希?任何人都可以解释内部实现级别的详细信息.

Gaz*_*ler 5

入门指南:

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

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

def edit(conn, %{"id" => id} = params)
...
Run Code Online (Sandbox Code Playgroud)

以上内容将匹配包含字符串id作为键的任何地图.

在OTP 18中,地图提高了性能,您可以在https://gist.github.com/BinaryMuse/bb9f2cbf692e6cfa4841上看到.并且很可能将来HashDict会被弃用.

在这个答案中有关于Elixir数据类型的一些很好的信息:关键字列表有什么好处?