我需要使用地图的值对地图列表进行排序。
list = [
%{id: 3, name: "Abe", count: 50},
%{id: 1, name: "Bill", count: 10},
%{id: 2, name: "Candy", count: 2},
]
例如,我需要按id
排序的列表:
list = [
%{id: 1, name: "Bill", count: 10},
%{id: 2, name: "Candy", count: 2},
%{id: 3, name: "Abe", count: 50},
]
...或count
或name
。我该怎么办?
答案 0 :(得分:7)
有Enum.sort_by
函数,该函数接受list
,mapper
和sorter
。以下代码可以解决问题:
list = [
%{id: 3, name: "Abe", count: 50},
%{id: 1, name: "Bill", count: 10},
%{id: 2, name: "Candy", count: 2},
]
Enum.sort_by list, &Map.fetch(&1, :id)
我们需要提供list
和一个返回映射属性的函数。 Map.fetch(&1, :id)
通过键或更简单地返回值:
Enum.sort_by list, & &1.id
sorter
默认为<=/2
函数,该函数以升序对列表进行排序。
答案 1 :(得分:4)
@IgodDrozdov提供了一个很好的解决方案。一个更基本的方法:您可以使用Enum.sort/2
:
Enum.sort(list, &(&1.id < &2.id))
第二个参数必须定义一个二进制关系(例如Enum.sort_by/3
中的sorter
)