在Erlang中,如何从给定id值的记录列表中返回整个记录?

Llo*_*ice 4 erlang records list

我在谷歌和之前的答案中看到了相关问题和解决方案,但它们都让我感到困惑.

假设我有一个记录列表,每个记录都有一个id.说:

-record(blah, {id, data}).
 Record2#blah.id = 7
 L = [Record1, Record2, ... ]
Run Code Online (Sandbox Code Playgroud)

我正在寻找像get_record(List,ID)这样的函数,它将完整地返回相应的记录,例如:

22> get_record(L, 7).
{blah, id=7, data="ta da!"}
Run Code Online (Sandbox Code Playgroud)

非常感谢,

LRP

一世

Rob*_*rop 9

在内部,记录是一个元组{Name, v1, v2},所以你的示例记录看起来像{blah, 7, data}一个元组.

考虑到这一点,您可以使用该lists:keyfind/3函数在列表中查找记录:

lists:keyfind(7, #blah.id, L).
Run Code Online (Sandbox Code Playgroud)

这里的第一个参数是ID值,第二个参数是ID字段的元组索引,第三个参数是列表.

#Name.Field语法允许你可以为任何记录字段的字段索引.


Til*_*man 5

你也可以使用列表理解,比如

[R || R <- Records, R#blah.id == 7]
Run Code Online (Sandbox Code Playgroud)

这将为您提供列表中与id匹配的所有记录.