Erlang 数组与列表

Ste*_*anG 5 arrays erlang comparison performance list

我是 Erlang 新手,所以我正在编写一个示例程序,并努力决定是否应该使用数组或列表。两者都很容易创建和处理,但我没有得到:

  • 如何在不知道应附加项目的索引的情况下将项目附加到数组中。是array:set(array:size(A),"a",A)要走的路吗?
  • 如何确定某个元素是否是数组的成员,就像函数一样lists:member()。我是否必须迭代整个数组并检查每个元素?

最后,就性能而言,哪一个更好?

Str*_*s3D 5

列表是 Erlang VM 原生的数据类型。数组被实现为嵌套元组的结构。

列表可用于模式匹配。数组不应该是这样。

正如 @zxq9 提到的,应该使用列表,除非明显不应该使用列表。我认为您应该使用数组的唯一时间是对集合执行大量随机更新时。否则就使用一个列表。

  • 正如您所提到的,可以使用 来附加到数组array:set(array:size(A),"a",A)。可以使用 来完成添加到列表之前["a"|A]。当然,如果您想附加到列表中,您可以运行lists:reverse["a"|A]然后再调用lists:reverse.
  • 要检查数组中是否存在某项,可以将数组转换为列表 ( array:sparse_to_list(A))。然后调用lists:member/2结果列表。

有关数组实现的更多信息,请访问:https ://stackoverflow.com/a/16464349/1245380