5

我已经知道答案了,但想确定一下。我正在构建一个字典以用作静态查找表(即,字典一旦创建就将是不可变的),并且发现这可以达到目的:

L = [{keyA, "A"}, {keyB, "B"}, {keyC, "C"}].
D = dict:from_list(L).
V = dict:fetch(keyA, D).

这是一种可以接受的方法还是我还不熟悉的其他魔法?

作为后续行动,如果我要创建一个可变字典,是否真的需要考虑诸如此类的阴谋?

D  = dict:from_list(L).
D1 = dict:append(keyD, "D", D).

最后,不是将字典从一个函数传递到另一个函数,而是有一个持久存储,我可以按照register/2-whereis/1例程的方式存储和检索它吗?

4

1 回答 1

10

是的,这是一种可以接受的方法。

如果你想修改你的字典,你总是需要从所有修改你的字典的操作中获取返回值,因为 Erlang 只有不可变的数据。这是处理所有 Erlang 数据的正常方式,因此您很快就会习惯它。

另一种方法是使用ets,这是另一种存储数据的方式。根据您创建 ets 表的方式,您可能需要也可能不需要携带对它的引用。ets 表中的数据不存储在进程堆中,因此访问它需要在进程和 ets 数据之间进行复制,但是 ets 表通常更适合存储大量数据。使用 dict/orddict/gb_trees 还是 ets 更好,很大程度上取决于您打算存储的数据以及您打算对其执行的操作。

于 2012-07-12T23:29:14.733 回答