LoginSignup
11
0

More than 1 year has passed since last update.

ひさかたの光のどけき春の日にしづ心なく花の散るらむ

この歌は、私が学んだ小学校の国語の教科書に載っていました。
そらで言えます。


Advent Calendar 2022 83日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

今日は、Map.filter/2を紹介します。

動機

Map.filter/2を紹介しようとおもった動機です。

  • 使用したことがない
  • Elixir 1.13.0で追加された関数
  • Advent Calendar 2022 goes behind 7 days. :sweat_smile:

Map.filter/2

公式の説明をそのまま掲載します。

スクリーンショット 2022-03-30 8.47.21.png

サンプルを貼っておきます。

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をご参照ください。

  • nilfalseが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もあるだろう! :rocket:

iex> Map.reject(%{one: 1, two: 2, three: 3}, fn {_key, val} -> rem(val, 2) == 1 end)
%{two: 2}

ありました :tada::tada::tada:

上記の例では、値が奇数ではない(つまり偶数である)要素をMapに残すことになります。
第2引数の関数は、各要素をタプルで{キー, 値}を受け取ります。
関数の結果でFalsyなものを返した要素がMapに残ります。

Truthy、Falsyについては、公式のTruthy and falsy valuesをご参照ください。

  • nilfalseがFalsyです
  • 上記以外は、Truthyです

Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\huge{Enjoy\ Elixir🚀}$

本日は、以下をご紹介しました。

以上です。

  1. @kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0