ひさかたの光のどけき春の日にしづ心なく花の散るらむ
この歌は、私が学んだ小学校の国語の教科書に載っていました。
そらで言えます。
Advent Calendar 2022 83日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixirを楽しんでいますか
今日は、Map.filter/2を紹介します。
動機
Map.filter/2を紹介しようとおもった動機です。
- 使用したことがない
- Elixir 1.13.0で追加された関数
- Advent Calendar 2022 goes behind 7 days.
Map.filter/2
公式の説明をそのまま掲載します。
サンプルを貼っておきます。
iex> Map.filter(%{one: 1, two: 2, three: 3}, fn {_key, val} -> rem(val, 2) == 1 end)
%{one: 1, three: 3}
上記の例では、値が奇数である要素をMapに残すことになります。
第2引数の関数は、各要素をタプルで{キー, 値}
を受け取ります。
関数の結果でTruthyなものを返した要素がMapに残ります。
Truthy、Falsy
Truthy、Falsyについては、公式のTruthy and falsy valuesをご参照ください。
-
nil
とfalse
がFalsyです - 上記以外は、Truthyです
Note
@mnishiguchi さんに重要なポイントを教えていただきました。
追記しておきます。
公式ドキュメントのNote
です。
if you find yourself doing multiple calls to Map.filter/2 and Map.reject/2 in a pipeline, it is likely more efficient to use Enum.map/2 and Enum.filter/2 instead and convert to a map at the end using Map.new/1.
パイプラインの中で何度もMap.filter/2やMap.reject/2をするくらいなら、そのかわりにEnum.map/2やEnum.filter/2を使って最後にMap.new/1でMapにするほうが効率的です。
Map.reject/2
Map.filter/2があれば、Map.reject/2もあるだろう!
iex> Map.reject(%{one: 1, two: 2, three: 3}, fn {_key, val} -> rem(val, 2) == 1 end)
%{two: 2}
ありました
上記の例では、値が奇数ではない(つまり偶数である)要素をMapに残すことになります。
第2引数の関数は、各要素をタプルで{キー, 値}
を受け取ります。
関数の結果でFalsyなものを返した要素がMapに残ります。
Truthy、Falsyについては、公式のTruthy and falsy valuesをご参照ください。
-
nil
とfalse
がFalsyです - 上記以外は、Truthyです
Wrapping up
Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
本日は、以下をご紹介しました。
- Map.filter/2
- Map.reject/2
- Truthy and falsy values はご一読をオススメします
以上です。