我的记录定义为:
1> rd(fact, {a,b,c}).
fact
我创建了三条记录并将它们放在一个列表中
2> F1 = #fact{a=1,b=1,c=1}.
#fact{a = 1,b = 1,c = 1}
(3> F2 = #fact{a=2,b=2,c=2}.
#fact{a = 2,b = 2,c = 2}
3> F3 = #fact{a=3,b=3,c=3}.
#fact{a = 3,b = 3,c = 3}
4> L = [F1,F2,F3].
[#fact{a = 1,b = 1,c = 1},
#fact{a = 2,b = 2,c = 2},
#fact{a = 3,b = 3,c = 3}]
现在,我想检查列表是否包含“a”为1且我不关心其余字段的记录
(dilbert@Martin-PC)21> lists:member(#fact{a=1}, L).
false
(dilbert@Martin-PC)23> lists:member(#fact{a=1,b=1,c=1}, L).
true
我怎样才能完成它?
答案 0 :(得分:7)
或者您可以使用keyfind。
lists:keyfind(1, #fact.a, L).
答案 1 :(得分:3)
记录是纯粹的语法糖。如果未在记录声明中指定其他字段的值,则使用原子'undefined'。因此,您的搜索适用于:
#fact{a=1, b='undefined', c='undefined'}
......当然不存在。
请改为尝试:
lists:any(fun(#fact{a=A}) -> A =:= 1 end, L).
答案 2 :(得分:3)
或列表理解:
OneList = [E || E <- L, E#fact.a =:= 1]