2012-10-05 27 views
4

我在Google和以前的答案中看到相關的問題和解決方案,但他們都讓我感到困惑。在Erlang中,如何從給定id值的記錄列表中返回整個記錄?

說我有一個記錄列表,每個記錄都有一個id。你說:

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

我正在尋找像get_record功能(列表,ID),將在它返回相應的記錄的全部,例如:

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

非常感謝,

LRP

回答

9

在內部,記錄的{Name, v1, v2}元組,S o您的示例記錄看起來像{blah, 7, data}作爲元組。

考慮到這一點,你可以使用lists:keyfind/3功能來查找記錄列表中:

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

這裏的第一個參數是ID值,第二個參數是ID字段中的元組指數第三個參數是列表。

#Name.Field語法允許您獲取任何記錄字段的字段索引。

+0

謝謝你,蒂爾曼和羅布。在我自己磕磕絆絆之後,我想出了列表理解。我試圖找出一個keyfind解決方案,但不明白如何訪問該字段。非常感謝你的幫助,夥計們。 –

5

你也可以用一個列表理解,像

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

,這將給你在匹配的ID列表中的所有記錄。

相關問題