我是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