【问题标题】:Elixir: How to find ALL occurrences of a value from a list of tuples?Elixir:如何从元组列表中找到所有出现的值?
【发布时间】:2021-06-17 12:46:10
【问题描述】:

查找所有出现的{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,第二个元素可以是任意值。

【问题讨论】:

  • 在您的问题中显示一些 minimal reproducible example,这是一些 Elixir 代码。 StackOverflow不是一个做我的家庭作业网站
  • @BasileStarynkevitch “我试过……” 部分正是展示了这种尝试。你的说法没有根据。

标签: list functional-programming tuples elixir find-occurrences


【解决方案1】:

在这里您可以使用带有模式匹配的推导:

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

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

请参阅documentation for for/1 了解更多信息。

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

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

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

【讨论】:

  • Enum.filter(list, &amp;match?({1, _}, &amp;1))Enum.filter(list, fn {1, _} -&gt; true; _ -&gt; false end) :) 实际上,理解规则,当然。
猜你喜欢
  • 2017-04-12
  • 2011-09-11
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多