鳳凰框架中的「params」爲什麼是地圖而不是散列? 任何人都可以解釋內部實現級別的細節。Elixir中的散列和地圖有什麼區別
2
A
回答
5
注:地圖最近已引入二郎山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個數據結構映射和映射集。
相關問題
- 1. 散列和索引有什麼區別?
- 2. 數組和散列有什麼區別?
- 3. 收藏和地圖有什麼區別?
- 4. 列表中的:::和++有什麼區別?
- 5. 在Elixir中,節點和進程之間有什麼區別?
- 6. 別名隊列和本地隊列有什麼區別?
- 7. 散列表和散列表之間有什麼區別? (並不特定於Java)
- 8. 散列連接和合並連接(Oracle RDBMS)有什麼區別?
- 9. bcrypt和散列多次之間有什麼區別?
- 10. OpenCL中本地和全局內存區別有什麼區別?
- 11. avro中的地圖和記錄有什麼區別?
- 12. ES6和lodash中的地圖方法有什麼區別?
- 13. 有什麼區別`和$(Bash中有什麼區別?
- 14. YARN和hive2隊列有什麼區別?
- 15. 圖像/和./images/有什麼區別?
- 16. View和EER圖有什麼區別?
- 17. GD和GD2圖像有什麼區別?
- 18. 光標和視圖有什麼區別?
- 19. ERD和「關係圖」有什麼區別?
- 20. 集中式和分佈式序列圖有什麼區別?
- 21. 在CSS中通過啓動代碼塊有什麼區別。 [點]和#[散列]?
- 22. 有什麼區別? :和||
- 23. &&和||有什麼區別?
- 24. 「/」和「/ *」有什麼區別?
- 25. 有什麼區別:。!和:r!?
- 26. ==和===有什麼區別?
- 27. Appender和〜有什麼區別?
- 28. $ @和$ *有什麼區別?
- 29. is和=有什麼區別?
- 30. #.00和#。##有什麼區別?
參數是地圖,因爲這將是處理這類數據結構的首選方式。 Elixir中的哈希仍然存在,因爲地圖不適合大型地圖(尚)。 –