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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。