如何按值对地图排序?

时间:2018-12-22 03:47:27

标签: elixir

我已经定义了如下地图:

%{
      "24fe6042-2673-4713-8052-5c06e5ddcce8" => %Parameter{
        index: 1,
        name: "b",
      },
      "28ab6e8b-95b8-4123-af5d-5e988071c383" => %Parameter{
        index: 0,
        name: "a",
      }
    },

如何根据值内的index将地图分类为数组?

1 个答案:

答案 0 :(得分:2)

使用Enum.sort/2

Enum.sort(input, fn
  {_, %Parameter{index: i1}}, {_, %Parameter{index: i2}} -> i1 <= i2
end)

或(习惯用法较少,每次迭代都使用Access行为)

Enum.sort(input, fn
  {_, v1}, {_, v2} -> v1.index <= v2.index
end)

我不确定我是否理解“将地图分类为数组”的措辞,但是如果您要舍弃键并获取值的数组,请使用Map.values/1

input
|> Map.values()
|> Enum.sort(fn
  %Parameter{index: i1}, %Parameter{index: i2} -> i1 <= i2
end)