在列表 Elixir 中查找重复键项的最后一个索引值
Find last index value for duplicate key item in list Elixir
我正在尝试查找 index_value 列表中重复的元素
[%{day: "mon", name: "Doc"}, %{day: "mon", name: "Doctor"}, %{day: "mon", name: "Doctor"}, %{day: "wed", name: "Doc"}, %{day: "wed", name: "Doc"}]
我只关心day
。
当我尝试时
list |> Enum.find_index(fn hour -> hour.day == "mon" end)
这给了我 0,其中“mon”有 3 个项目。
我想获取最后一个索引值,无论如何我的主要目的是使用该索引获取下一个值。
在这种情况下,我试图获得
%{day: "wed", name: "Doc"}
如有帮助,将不胜感激。
链表没有index这样的东西。链表是不是数组。
如果你想在一堆 %{day: "mon"}
之后得到下一个值,你可能想要减少
Enum.reduce_while(input, :before, fn
%{day: "mon"}, _ -> {:cont, :in}
result, :in -> {:halt, result}
end)
#⇒ %{day: "wed", name: "Doc"}
或者,这可以说更具可读性,但性能较差,Enum.chunk_every/4
in combination with Enum.find/2
input
|> Enum.chunk_every(2, 1, :discard)
|> Enum.find(&match?([%{day: "mon"}, %{day: day}] when day != "mon", &1))
#⇒ [%{day: "mon", name: "Doctor"}, %{day: "wed", name: "Doc"}]
返回数组的second/last个元素就是结果。
我正在尝试查找 index_value 列表中重复的元素
[%{day: "mon", name: "Doc"}, %{day: "mon", name: "Doctor"}, %{day: "mon", name: "Doctor"}, %{day: "wed", name: "Doc"}, %{day: "wed", name: "Doc"}]
我只关心day
。
当我尝试时
list |> Enum.find_index(fn hour -> hour.day == "mon" end)
这给了我 0,其中“mon”有 3 个项目。
我想获取最后一个索引值,无论如何我的主要目的是使用该索引获取下一个值。
在这种情况下,我试图获得
%{day: "wed", name: "Doc"}
如有帮助,将不胜感激。
链表没有index这样的东西。链表是不是数组。
如果你想在一堆 %{day: "mon"}
之后得到下一个值,你可能想要减少
Enum.reduce_while(input, :before, fn
%{day: "mon"}, _ -> {:cont, :in}
result, :in -> {:halt, result}
end)
#⇒ %{day: "wed", name: "Doc"}
或者,这可以说更具可读性,但性能较差,Enum.chunk_every/4
in combination with Enum.find/2
input
|> Enum.chunk_every(2, 1, :discard)
|> Enum.find(&match?([%{day: "mon"}, %{day: day}] when day != "mon", &1))
#⇒ [%{day: "mon", name: "Doctor"}, %{day: "wed", name: "Doc"}]
返回数组的second/last个元素就是结果。