5

関連する問題と解決策が Google と以前の回答で見られますが、それらはすべて私を困惑させます。

それぞれにIDを持つレコードのリストがあるとします。言う:

-record(blah, {id, data}).
 Record2#blah.id = 7
 L = [Record1, Record2, ... ]

対応するレコード全体を返す get_record(List, ID) のような関数を探しています。

22> get_record(L, 7).
{blah, id=7, data="ta da!"}

どうもありがとう、

LRP

4

2 に答える 2

10

内部的には、レコードは のタプル{Name, v1, v2}なので、例のレコードは{blah, 7, data}タプルのようになります。

これを念頭に置いて、lists:keyfind/3関数を使用してリスト内のレコードを検索できます。

lists:keyfind(7, #blah.id, L).

ここでの最初の引数は ID 値、2 番目の引数は ID フィールドのタプル インデックス、3 番目の引数はリストです。

この#Name.Field構文を使用すると、任意のレコード フィールドのフィールド インデックスを取得できます。

于 2012-10-05T20:03:07.497 に答える
6

次のようなリスト内包表記を使用することもできます

[R || R <- Records, R#blah.id == 7]

これにより、リスト内の id に一致するすべてのレコードが得られます。

于 2012-10-05T21:23:40.163 に答える