2015-10-25 50 views
2

鳳凰框架中的「params」爲什麼是地圖而不是散列? 任何人都可以解釋內部實現級別的細節。Elixir中的散列和地圖有什麼區別

+0

參數是地圖,因爲這將是處理這類數據結構的首選方式。 Elixir中的哈希仍然存在,因爲地圖不適合大型地圖(尚)。 –

回答

5

getting started guide

注:地圖最近已引入二郎山VM與EEP 43二郎17提供了部分實現EEP,其中只有「小地圖」的支持。這意味着只有在最多存儲幾十個鍵時,地圖才具有良好的性能特徵。爲了填補這個空白,Elixir還提供了HashDict模塊,該模塊使用哈希算法來提供支持成千上萬個性能良好的密鑰的字典。

一個地圖的主要優點是部分圖案匹配:

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

上面將匹配其包含字符串id作爲密鑰的任何映射。

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

有一個在這個答案大約藥劑數據類型一些偉大的信息:What is the benefit of Keyword Lists?

1

藥劑引入散列/類型的字典爲核心語言的一部分,Erlang的虛擬機不具有散列的支持。在映射和關鍵字列表(配對元組的列表)之上實現哈希下面。

HashDict在頂層結構上實現,結構在頂層地圖上實現。

令人困惑的是,elixir哈希/字典的未來版本將被棄用,只有2個數據結構映射和映射集。