根据列表长生不老药对地图列表进行排序



我有这个排序列表

@days ["mon", "tue", "wen", "thu", "fri", "sat", "sun"]

我有一份地图清单,比如

[%{day: "sat"}, %{day: "tue"}, %{day: "fri"}]

我正在尝试根据天数对地图列表进行排序,我已经尝试过Enum.sort_by/2,但我无法设置正确的条件。任何帮助都将是感激之情。

您想要的是首先生成具有O(1)访问权限的分拣机

iex|💧|1 ▸ days = ["mon", "tue", "wen", "thu", "fri", "sat", "sun"]
["mon", "tue", "wen", "thu", "fri", "sat", "sun"]
iex|💧|2 ▸ days_idx = days |> Enum.zip(1..7) |> Map.new()

现在,对原始列表进行排序将像一样简单

iex|💧|3 ▸ Enum.sort_by(
...|💧|3 ▸   [%{day: "sat"}, %{day: "tue"}, %{day: "fri"}],
...|💧|3 ▸   &days_idx[&1[:day]])
#⇒ [%{day: "tue"}, %{day: "fri"}, %{day: "sat"}]

最新更新