【问题标题】:Erlang lists:keyfind/3 not working as expectedErlang 列表:keyfind/3 未按预期工作
【发布时间】:2017-06-12 05:03:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你为什么期望它返回{3,1}lists:keyfind/3 仅搜索列表中每个元组的第 N 个(在本例中为 1)项,而不是全部。你的意思是lists:keyfind(3, 1, A).
  • 我想我没有正确理解这个函数的第二个参数。这个N 是什么意思?如果我想匹配 {3,1} 而不仅仅是 3 怎么办?

标签: erlang erlang-shell


【解决方案1】:

lists:keyfind/3 通过将每个元组的Nth 值与给定值进行比较来搜索元组列表。您的代码正在搜索第一个元素为 {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

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 2016-02-27
    • 1970-01-01
    • 2020-03-07
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多