arrays - Erlang 数组与列表

标签 arrays performance list erlang comparison

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

相关文章:

arrays - 找到数组中的最大数量并将字符串与它们关联

c# - 减少 Oracle 中的解析调用

python - 提高 python 在 networkx 中的性能

java - 在 Java 中,是 substring(int k, int y) 还是 substring(int k) 更高效?

java - 使用 Lambda 在 Java 中合并两个不同类型(字符串和整数)的排序列表

arrays - arr.sort(key=lambda x : (x[0], -x[1])) 是什么意思?

c# - List<T>.AddRange 和 yield 语句

javascript - 使用要查找的键数组和要替换的数组值来查找和替换

c++ - Cin 用于字符数组

javascript - 遍历 DIV 元素并获取动态添加的文本输入 - PHP