我想我已经知道答案了,但想确定一下。我正在构建一个字典作为静态查找表(即,字典一旦创建将是不可变的),并且发现这可以达到目的:
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
常规?
最佳答案
是的,这是一种可以接受的方法。
如果你想修改你的字典,你总是需要从修改你的字典的所有操作中获取返回值,因为 Erlang 只有不可变数据。这是处理所有 Erlang 数据的正常方式,因此您很快就会习惯它。
另一种方法是使用 ets这是另一种存储数据的方式。根据您创建 ets 表的方式,您可能需要也可能不需要携带对它的引用。 ets 表中的数据不存储在进程堆中,因此访问它需要在进程和 ets 数据之间进行复制,但是 ets 表通常更适合存储大量数据。使用 dict/orddict/gb_trees 还是 ets 更好取决于您打算存储的数据以及您打算对其进行的操作。
关于dictionary - 二郎字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460616/