1
以下代碼片段有什麼問題?Erlang列表:keyfind/3不按預期工作
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
爲什麼函數返回false?理想情況下它應該返回{3,1}。
以下代碼片段有什麼問題?Erlang列表:keyfind/3不按預期工作
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
爲什麼函數返回false?理想情況下它應該返回{3,1}。
lists:keyfind/3
通過將每個元組的N
th值與給定值進行比較來搜索元組列表。您的代碼正在搜索第一個元素爲{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
爲什麼你期望它返回'{3,1}'? 'list:keyfind/3'只搜索列表中每個元組的第N個(本例中爲1)項,而不是整個事物。你的意思是做'list:keyfind(3,1,A).'? – Dogbert
我想我不明白這個函數的第二個參數。這個'N'是什麼意思?如果我想匹配'{3,1}'而不是'3',該怎麼辦? –