當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Elixir Enum.min_max_by用法及代碼示例

Elixir語言中 Enum.min_max_by 相關用法介紹如下。

用法:

min_max_by(enumerable, fun, sorter_or_empty_fallback \\ &</2, empty_fallback \\ fn -> raise Enum.EmptyError end)
@spec min_max_by(
  t(),
  (element() -> any()),
  (element(), element() -> boolean()) | module(),
  (() -> empty_result)
) :: {element(), element()} | empty_result
when empty_result: any()

返回一個元組,其中包含由給定函數計算的可枚舉中的最小和最大元素。

如果多個元素被認為是最大或最小的,則返回找到的第一個。

例子

iex> Enum.min_max_by(["aaa", "bb", "c"], fn x -> String.length(x) end)
{"c", "aaa"}

iex> Enum.min_max_by(["aaa", "a", "bb", "c", "ccc"], &String.length/1)
{"a", "aaa"}

iex> Enum.min_max_by([], &String.length/1, fn -> {nil, nil} end)
{nil, nil}

這個函數使用 Erlang 的術語排序這一事實意味著比較是結構化的而不是語義的。因此,如果要比較結構體,大多數結構體都提供了"compare"函數,例如 Date.compare/2 ,它接收兩個結構體並返回:lt(小於)、:eq(等於)和:gt (比...更棒)。如果你傳遞一個模塊作為排序函數,Elixir 會自動使用該模塊的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.min_max_by(users, &(&1.birthday), Date)
{
  %{name: "Lovelace", birthday: ~D[1815-12-10]},
  %{name: "Ellis", birthday: ~D[1943-05-11]}
}

最後,如果您不想引發空枚舉,則可以傳遞空回退:

iex> Enum.min_max_by([], &String.length/1, fn -> nil end)
nil

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Enum.min_max_by(enumerable, fun, sorter_or_empty_fallback \\ &</2, empty_fallback \\ fn -> raise Enum.EmptyError end)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。