Elixir:如何从元组列表中找到所有出现的值?
Elixir: How to find ALL occurrences of a value from a list of tuples?
找到所有出现的{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
只是returns第一个也是唯一一个符合条件或功能的元素,即:{1,1}
。
我的目标是找到所有包含{1, _}
的元组,其中第一个元素必须是1,第二个元素可以是任何值。
在这里你可以使用模式匹配的理解:
result = for x = {1, _} <- list, do: x
任何与模式 {1, _}
不匹配的 x
都将被过滤掉。
有关详细信息,请参阅 documentation for for/1
。
您也可以将 Enum.filter/2
与 match?/2
宏一起使用以获得相同的结果:
result = Enum.filter(list, fn x -> match?({1, _}, x) end)
Enum.find/2
在查找单个元素时很有用,例如如果您想找到符合您条件的第一个条目。
找到所有出现的{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
只是returns第一个也是唯一一个符合条件或功能的元素,即:{1,1}
。
我的目标是找到所有包含{1, _}
的元组,其中第一个元素必须是1,第二个元素可以是任何值。
在这里你可以使用模式匹配的理解:
result = for x = {1, _} <- list, do: x
任何与模式 {1, _}
不匹配的 x
都将被过滤掉。
有关详细信息,请参阅 documentation for for/1
。
您也可以将 Enum.filter/2
与 match?/2
宏一起使用以获得相同的结果:
result = Enum.filter(list, fn x -> match?({1, _}, x) end)
Enum.find/2
在查找单个元素时很有用,例如如果您想找到符合您条件的第一个条目。