Elixir语言中 Enum.sort_by
相关用法介绍如下。
用法:
sort_by(enumerable, mapper, sorter \\ &<=/2)
@spec sort_by(
t(),
(element() -> mapped_element),
(element(), element() -> boolean())
| :asc
| :desc
| module()
| {:asc | :desc, module()}
) :: list()
when mapped_element: element()
根据提供的sorter
函数对enumerable
的映射结果进行排序。
此函数使用提供的mapper
函数映射enumerable
的每个元素。然后使用 sorter
函数按映射元素对可枚举进行排序,该函数默认为
。Kernel.<=/2
与 sort_by/3
的不同之处在于它只计算可枚举中每个元素的比较值一次,而不是每次比较中的每个元素计算一次。如果在两个元素上调用相同的函数,则使用 sort/2
会更有效。sort_by/3
例子
使用
的默认 <=/2
sorter
:
iex> Enum.sort_by(["some", "kind", "of", "monster"], &byte_size/1)
["of", "some", "kind", "monster"]
按多个属性排序 - 首先按大小,然后按第一个字母(这利用了元组逐个元素比较的事实):
iex> Enum.sort_by(["some", "kind", "of", "monster"], &{byte_size(&1), String.first(&1)})
["of", "kind", "some", "monster"]
与
类似,您可以传递自定义排序器:sort/2
iex> Enum.sort_by(["some", "kind", "of", "monster"], &byte_size/1, &>=/2)
["monster", "some", "kind", "of"]
或使用 :asc
和 :desc
:
iex> Enum.sort_by(["some", "kind", "of", "monster"], &byte_size/1, :desc)
["monster", "some", "kind", "of"]
与
一样,避免使用默认排序函数对结构进行排序,因为默认情况下它执行结构比较而不是语义比较。在这种情况下,您应将排序函数作为第三个元素或任何实现sort/2
compare/2
函数的模块传递。例如,要分别按用户的生日升序和降序对用户进行排序:
iex> users = [
...> %{name: "Ellis", birthday: ~D[1943-05-11]},
...> %{name: "Lovelace", birthday: ~D[1815-12-10]},
...> %{name: "Turing", birthday: ~D[1912-06-23]}
...> ]
iex> Enum.sort_by(users, &(&1.birthday), Date)
[
%{name: "Lovelace", birthday: ~D[1815-12-10]},
%{name: "Turing", birthday: ~D[1912-06-23]},
%{name: "Ellis", birthday: ~D[1943-05-11]}
]
iex> Enum.sort_by(users, &(&1.birthday), {:desc, Date})
[
%{name: "Ellis", birthday: ~D[1943-05-11]},
%{name: "Turing", birthday: ~D[1912-06-23]},
%{name: "Lovelace", birthday: ~D[1815-12-10]}
]
相关用法
- Elixir Enum.sort用法及代码示例
- Elixir Enum.split_with用法及代码示例
- Elixir Enum.sum用法及代码示例
- Elixir Enum.slice用法及代码示例
- Elixir Enum.split用法及代码示例
- Elixir Enum.split_while用法及代码示例
- Elixir Enum.shuffle用法及代码示例
- Elixir Enum.scan用法及代码示例
- Elixir Enum.slide用法及代码示例
- Elixir Enum.unzip用法及代码示例
- Elixir Enum.min_max用法及代码示例
- Elixir Enum.reduce_while用法及代码示例
- Elixir Enum.at用法及代码示例
- Elixir Enum.dedup用法及代码示例
- Elixir Enum.zip用法及代码示例
- Elixir Enum.find_value用法及代码示例
- Elixir Enum.product用法及代码示例
- Elixir Enum.map_join用法及代码示例
- Elixir Enum.zip_with用法及代码示例
- Elixir Enum.intersperse用法及代码示例
- Elixir Enum.flat_map用法及代码示例
- Elixir Enum.count用法及代码示例
- Elixir Enum.fetch用法及代码示例
- Elixir Enum.frequencies用法及代码示例
- Elixir Enum.drop用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Enum.sort_by(enumerable, mapper, sorter \\ &<=/2)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。