Erlang 数组与列表

Erlang array vs list

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

最后,哪个性能更好?

列表是 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

此处提供了有关数组实现的更多信息:

如果您认为您可能需要像列表这样的函数:member/2,请使用列表:o)

数组在通过其索引访问任何元素有意义时带来价值,避免列表探索或无聊的元组匹配,如 {_,_,_,_,_,_,N,_,_,_,_} = Tuple,N = array:get(6,Array) 很好地取代。 (或 element(7,Tuple),但对于元组,您没有 map、sparse_pap、foldl ...)。