使用关联列表而不是记录是否是个好主意?

时间:2009-04-10 19:28:38

标签: erlang

任何有经验的Erlang程序员都会推荐association lists超过记录吗?

一种情况可能是不同机器上的两个(或更多)节点正在交换消息。我们希望能够独立升级每台机器上的软件。某些升级可能涉及向正在发送的一个(或多个)消息添加字段。似乎使用记录,因为消息意味着你总是必须在锁定步骤中对两台机器进行升级,以便额外的字段不会导致接收器忽略记录。然而,如果您使用类似关联列表(仍然具有“类似记录”的API)之类的东西,那么尚未升级的接收器仍将成功接收消息并忽略新字段。我意识到这不是始终所需的行为,但经常。此外,假设消息相当小,因此查找时间无关紧要。

假设上述内容有道理,我还有以下其他问题:

  • 是否有一个标准(或广泛使用)的图书馆?一些琐碎的谷歌搜索没有发现任何东西。
  • 是否还有其他情况会使用关联列表(或类似名称)?

3 个答案:

答案 0 :(得分:5)

对于少量按键,您可以使用名为proplists的列表,您应该使用dict。在这两种情况下,最大的缺点是你不能像记录那样使用模式匹配。还存在速度惩罚,但在大多数情况下无关紧要。

答案 1 :(得分:5)

您基本上有三种选择:

  1. 使用记录
  2. 使用关联列表(支持者)
  3. 使用组合
  4. 我使用记录,其中更改它的可能性非常低。这样我就能得到模式匹配并加速我想要的速度。

    我使用proplists,我需要哈希表功能。我以牺牲模式匹配和速度为代价获得了灵活性。

    有时我会同时使用它们。具有一个支持列表的字段的记录。这样我可以在其中的一部分上进行模式匹配,并且在我需要的地方具有灵活性。

    所有这三种选择都有不同的权衡,因此您基本上只需要评估您的特定需求并做出选择。可能需要进行一些原型设计和游戏,以确定哪些权衡是有意义的,哪些功能是绝对必要的。

答案 2 :(得分:3)

请注意列表:keysearch / 3几乎是“assq”。