在列表 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个元素就是结果。