5

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

假设我有一个记录列表,每个记录都有一个 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 值,第二个参数是 ID 字段的元组索引,第三个参数是列表。

#Name.Field语法允许您获取任何记录字段的字段索引。

于 2012-10-05T20:03:07.497 回答
6

您也可以使用列表理解,例如

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

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

于 2012-10-05T21:23:40.163 回答