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 に答える