以下代码片段有什么问题?
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
为什么函数返回false?它理想情况下应该返回{3,1}。
答案 0 :(得分:3)
lists:keyfind/3
通过将每个元组的N
值与给定值进行比较来搜索元组列表。您的代码正在搜索第一个元素为{3, 1}
的元组,该元组在您的列表中不存在。要搜索第一个元素为3
的元组,您可以执行lists:keyfind(3, 1, A).
:
1> A = [{X, 1} || X <- lists:seq(1,5)].
[{1,1},{2,1},{3,1},{4,1},{5,1}]
2> lists:keyfind({3,1}, 1, A).
false
3> lists:keyfind(3, 1, A).
{3,1}
如果要查找确切的值,可以使用lists:member/2
检查它是否存在:
4> lists:member({3,1}, A).
true