我需要使用map的值来排序地图列表.
list = [
%{id: 3, name: "Abe", count: 50},
%{id: 1, name: "Bill", count: 10},
%{id: 2, name: "Candy", count: 2},
]
Run Code Online (Sandbox Code Playgroud)
例如,我需要按以下顺序排序id:
list = [
%{id: 1, name: "Bill", count: 10},
%{id: 2, name: "Candy", count: 2},
%{id: 3, name: "Abe", count: 50},
]
Run Code Online (Sandbox Code Playgroud)
......或者count或name.我怎么能这样做?
有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)
Run Code Online (Sandbox Code Playgroud)
我们需要提供list一个返回映射属性的函数.Map.fetch(&1, :id)按键返回值,甚至更简单:
Enum.sort_by list, & &1.id
Run Code Online (Sandbox Code Playgroud)
sorter默认情况下是<=/2函数,它按asc顺序对列表进行排序.
@IgodDrozdov 提供了一个很好的解决方案。一个更基本的:你可以使用Enum.sort/2:
Enum.sort(list, &(&1.id < &2.id))
Run Code Online (Sandbox Code Playgroud)
第二参数必须定义一个二元关系(如sorter在Enum.sort_by/3)
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |