代码之家  ›  专栏  ›  技术社区  ›  Junaid Farooq

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

  •  0
  • Junaid Farooq  · 技术社区  · 4 年前

    我有这个分类清单

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

    我有一个地图列表,比如

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

    Enum.sort_by/2 但我无法提出正确的条件。任何帮助都是感激的。

    1 回复  |  直到 4 年前
        1
  •  0
  •   Aleksei Matiushkin    4 年前

    你想要的是生产一个 分拣机 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"}]