我是Erlang的新手,所以我正在研究一个示例程序,并努力决定是否应该使用数组或列表。两者都很容易创建和处理,但我没有得到:
array:set(array:size(A),"a",A)
是要走的路吗?lists:member()
函数一样。我是否必须遍历整个数组并检查每个元素?最后,哪一个在性能方面更好?
答案 0 :(得分:2)
列表是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
答案 1 :(得分:1)
如果您认为可能需要像list:member / 2这样的函数,请使用列表:o)
当有意义通过索引访问任何元素时,数组会带来价值,避免列表探索或无聊的元组匹配,如{_,_,_,_,_,_,N,_,_,_,_} = Tuple,
很好地被N = array:get(6,Array)
取代。 (或element(7,Tuple)
,但使用元组,你没有map,sparse_pap,foldl ......)。