Erlang列出:keyfind / 3没有按预期工作

时间:2017-06-11 17:22:40

标签: erlang erlang-shell

以下代码片段有什么问题?

> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false

为什么函数返回false?它理想情况下应该返回{3,1}。

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