我是 Erlang 新手,所以我正在编写一个示例程序,并努力决定是否应该使用数组或列表。两者都很容易创建和处理,但我没有得到:
- 如何在不知道应附加项目的索引的情况下将其附加到数组中。是
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
。
有关数组实现的更多信息,请参见此处:https://stackoverflow.com/a/16464349/1245380
关于arrays - Erlang 数组与列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676383/