【发布时间】:2022-01-09 16:46:00
【问题描述】:
我有这个排序列表
@days ["mon", "tue", "wen", "thu", "fri", "sat", "sun"]
我有一个地图列表,例如
[%{day: "sat"}, %{day: "tue"}, %{day: "fri"}]
我正在尝试根据天数对地图列表进行排序,我尝试过Enum.sort_by/2,但我无法设置正确的条件。任何帮助将不胜感激。
【问题讨论】:
标签: elixir
我有这个排序列表
@days ["mon", "tue", "wen", "thu", "fri", "sat", "sun"]
我有一个地图列表,例如
[%{day: "sat"}, %{day: "tue"}, %{day: "fri"}]
我正在尝试根据天数对地图列表进行排序,我尝试过Enum.sort_by/2,但我无法设置正确的条件。任何帮助将不胜感激。
【问题讨论】:
标签: elixir
您想要的是首先生成一个具有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"}]
【讨论】: