LoginSignup
14
0

More than 1 year has passed since last update.

$\huge{元氣ですかーーーーッ!!!}$

はじめに

闘魂とElixirが出会いました。
闘魂 meets Elixir.です。
Elixir meets 闘魂.でもよいです。

本日は、Map.merge/3を説明します。

iex> "Elixir" |> String.graphemes() |> Enum.frequencies()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}

Map.merge/3

2つのマップをマージします。
マップとはキーと値のアレです。はてな? の方は、「闘魂Elixir ── 11. Mapモジュール」をご覧になってください。

もしも両方のマップに同じキーが含まれている場合は、第3引数に指定した関数で裁定します。レフェリーです。
第3引数の関数は3つの引数をとります。先頭から、キー、先頭Mapの値、後続Mapの値となります。

こちらの図1をみてください。

image.png

なかなか複雑ですね。説明します。
%{a: 1, b:2}%{a: 3, d: 4}という2つのMapをマージしています。
キー:aは両方のマップに含まれています。ですからどうやってマージすればよいか指定してあげる必要があります。
重複するキーがあった場合に値をどのように決めるか、つまりどのように裁定をするのかを関数で第3引数で指定します。ここではこの関数のことを裁定(レフェリー)関数と呼びます。
この裁定(レフェリー)関数は、3つの引数をとります。先頭から、キー、先頭Mapの値、後続Mapの値となります。
ここでの裁定の仕方は足し算(和)としているわけです。

説明はこのくらいにしておきます。
さっそく動かしてみましょう。

IExで確かめてみましょう。

CMD
iex

IExが立ち上がったら、以下のプログラムを実行してみてください。

iex> f = fn _k, v1, v2 -> v1 + v2 end

iex> Map.merge(%{a: 1, b: 2}, %{a: 3, d: 4}, f)
%{a: 4, b: 2, d: 4}

%{a: 1, b: 2}%{a: 3, d: 4}の2つのMapから、%{a: 4, b: 2, d: 4}得られました :tada:
キー:aの値は足し算されています。

ワンポイントレッスン

ワンポイントレッスンです。
裁定をくだす関数はいろんなことができます。

先優先にする

iex> f = fn _k, v1, _v2 -> v1 end

iex> Map.merge(%{a: 1, b: 2}, %{a: 3, d: 4}, f)
%{a: 1, b: 2, d: 4}

後優先にする

iex> f = fn _k, _v1, v2 -> v2 end

iex> Map.merge(%{a: 1, b: 2}, %{a: 3, d: 4}, f)
%{a: 3, b: 2, d: 4}

キーに応じて処理をわける

iex> f = (fn :inoki, _v1, _v2 -> "元氣ですかーーーーッ!!!!"
            _key, v1, v2 -> v1 + v2
     end)

iex> Map.merge(%{a: 1, b: 2, inoki: 123}, %{a: 3, d: 4, inoki: 123}, f)
%{a: 4, b: 2, d: 4, inoki: "元氣ですかーーーーッ!!!!"}

キー:inokiが重複した場合には、値は"元氣ですかーーーーッ!!!!"にしています。その他の場合は足し算です。

今日の闘魂

今日は、『孟子』から言葉を引きます。


人にそんする者は眸子ぼうしより良きはなし

解説は、こちらをご参照ください。
猪木さん流に言うと、 「人間を判断するときには、まず、その人の目を見ろ。夢に溢れた人の目は輝いている。」 ということです。

人間の感情は、必ず目に表れる。リング上で対戦相手と向かい合ったときに、相手の目を射貫き、その本性を見抜かなければ勝負にならない。虚勢を張っているのか、それとも心の奥底からの自信があるのか。感情のすべては、必ず目に表れるのだ。(中略)人間を判断するときには、まず、その人の目を見ろ。夢に溢れた人の目はキラキラと輝いている。反対に、腹に一物ある人の目は濁り、嘘をついている人の目はせわしなく泳いでいる。これが闘いを通じて会得した、わたしなりの人間鑑定術だ。

:book:アントニオ猪木 最後の闘魂:book:から引きました。
みなさまもぜひこの本をお手にとられて、猪木さんが残されたメッセージを通じて、直接猪木さんから「元氣」をもらってください。

image.png

さいごに

Map.merge/3を説明しました。

闘魂の意味は、 「己に打ち克ち、闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。

$\huge{1、2、3 ぁっダー!}$



Twitter


$\huge{元氣があればなんでもできる!}$

  1. 図は、https://excalidraw.com/ を使って作成しています。スゴ腕ハッカーが書いたかのような手書き風の絵が書けるので最近の私のお気に入りツールです。

14
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
14
0