Erlang 列表:keyfind/3 未按预期工作
Erlang lists:keyfind/3 not working as expected
下面的代码片段有什么问题?
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
为什么函数 return 为假?理想情况下应该 return {3,1}.
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
下面的代码片段有什么问题?
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
为什么函数 return 为假?理想情况下应该 return {3,1}.
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