Erlang字典

Joe*_*Joe 5 erlang dictionary

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

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

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

作为一个后续,如果我正在创建一个可变字典,是否真的必须接受诸如此类的阴谋

D  = dict:from_list(L).
D1 = dict:append(keyD, "D", D).
Run Code Online (Sandbox Code Playgroud)

最后,而不是围绕通过字典从功能作用,是有持久存储,我可以藏匿和检索,沿的线条register/2- whereis/1常规?

rvi*_*ing 8

是的,这是一种可接受的方法.

如果要修改字典,则始终需要从修改字典的所有操作中获取返回值,因为Erlang只有不可变数据.这是处理所有Erlang数据的常用方法,因此您将很快习惯它.

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