为什么在Dict上使用HashDict?

时间:2014-03-02 12:14:44

标签: elixir

Elixir新手在这里。这个问题简短而甜蜜!

我正在通过在线编程练习学习Elixir,并就最近提交的内容提供了以下建议:

  

一般来说,最好使用Dict.foo而不是HashDict.foo if   可能。 Dict函数适用于所有类型的字典,如果   您的代码更改后,您将无需更新。

这让我意识到我不知道你应该在Dict上使用HashDict。人们有什么特别的美德?

3 个答案:

答案 0 :(得分:4)

HashDict的API与Dict的API匹配,因为HashDict实现了Dict.Behaviour。建议在HashDict上使用Dict的API是因为一般来说,对接口而不是实现进行编码总是一个好主意,其中Dict在这种情况下是接口,而HashDict是该接口的实现。

我也不确定Sasa关于性能的观点,这可能是一个问题,但我几乎100%确定你应该更关心你是如何使用 Dict,而不是你如何访问它。

答案 1 :(得分:3)

我能想到的唯一用例是性能优化。 Dict函数需要在运行时解析目标模块,然后将调用转发给该模块。直接呼叫HashDict可以克服这一步骤。

我确信在绝大多数情况下,这种差异并不重要。但是如果你有一个每微秒计数的情况,并且你经常调用Dict,你可以通过直接调用HashDict获得一些速度。就个人而言,在做这件事之前,我会先测量一下。

如此长的故事,Dict应该在99,9999999%的情况下为你服务: - )

答案 2 :(得分:0)

据我所知,现在你应该使用MapDict is deprecatedHashDict一样{/ 3}}