我是Erlang的新手,所以我正在研究一个示例程序,并努力决定是使用数组还是列表。两者都很容易创建和处理,但我没有得到:Erlang数组vs列表
- 如何将一个项目追加到数组而不知道应该追加到哪里的索引。
array:set(array:size(A),"a",A)
要走的路吗? - 如何确定某个元素是否为数组的成员,就像
lists:member()
函数一样。我是否必须遍历整个数组并检查每个元素的这个?
最后,哪一个在性能方面更好?
我是Erlang的新手,所以我正在研究一个示例程序,并努力决定是使用数组还是列表。两者都很容易创建和处理,但我没有得到:Erlang数组vs列表
array:set(array:size(A),"a",A)
要走的路吗?lists:member()
函数一样。我是否必须遍历整个数组并检查每个元素的这个?最后,哪一个在性能方面更好?
列表是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
。上可用的数组实现此如果你认为你可能需要像列表的功能:成员/ 2,使用列表:O)
阵列带来的价值时通过其索引来访问任何元素是有意义的,避免列表探索或无聊的元组匹配,如{_,_,_,_,_,_,N,_,_,_,_} = Tuple,
,它很好地被N = array:get(6,Array)
取代。 (或者element(7,Tuple)
,但是元组中没有map,sparse_pap,foldl ...)。
经验法则:使用列表,除非它很明显你不应该。 – zxq9 2015-02-23 15:25:36