Elixir:如何从元组列表中找到所有出现的值?

找出所有出现的{1, _}; 换句话说,列表中每个元组的所有第一个元素值都是 1。

考虑以下输入:

[
  {1, 0},
  {2, 2},
  {1, 1},
  {11, 1},
  {1, 3},
  {1, 2},
  {13, 1}
]

预期输出:

[{1,0}, {1,1}, {1,3}, {1,2}]

我试过了Enum.find(tl(input), fn x -> elem(x, 0) == elem(hd(input), 0) end),但我意识到Enum.find/2只返回第一个也是唯一一个符合条件或函数的元素,即:{1,1}

我的目标是找到所有包含 的元组{1, _},其中第一个元素必须是 1,第二个元素可以是任何值。

回答

在这里,您可以使用具有模式匹配的理解:

result = for x = {1, _} <- list, do: x

任何x与模式不匹配的{1, _}都将被过滤掉。

有关更多信息,请参阅文档for/1

您也可以Enum.filter/2match?/2宏一起使用以达到相同的结果:

result = Enum.filter(list, fn x -> match?({1, _}, x) end)

Enum.find/2 在查找单个元素时很有用,例如,如果您想查找与您的条件匹配的第一个条目。

  • `Enum.filter(list, &match?({1, _}, &1))` or `Enum.filter(list, fn {1, _} -> true; _ -> false end)` 🙂 Actually, comprehensions rule, of course.

以上是Elixir:如何从元组列表中找到所有出现的值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>