Help us understand the problem. What is going on with this article?

Erlang mapsの関数 "簡易" 説明

More than 1 year has passed since last update.

Erlang mapsの関数 "簡易" 説明

mapsの関数はどんなものがあるのか、1行の簡単な説明とサンプルコードを記載。
詳しい情報は公式リファレンス参照。

元ネタ(公式リファレンス) http://erlang.org/doc/man/maps.html

すぐ機能を探して確認できて、どう動くかざっくり把握できるように記述。
解説の順番は、主観に基づく重要度で並べました。

このページのTODO:

  • ほぼ書きっぱなしなので、間違いがないか見直す。
  • 余裕があればもうちょっとマシな肉付けをする。しかし、どうせ書くなら、別のライブラリを増やしたいところ。
  • サンプルコードも要改善

空のMapsを作成する - maps:new/0

M0 = maps:new(),

Mapsに値を追加する - maps:put/3

M1 = maps:put(a, 1, M0),
M2 = maps:put(b, 2, M1),
M3 = maps:put(c, 3, M2),
M4 = maps:put(d, "abc", M3),
M5 = maps:put(e, <<"アイウエオ"/utf8>>, M4),   

Mapsから値を取得する - maps:get/2, maps:get/3

1 = maps:get(a, M5),
not_found = maps:get(g, M5, not_found),

Mapsから値を削除する - maps:remove/2

M4 = maps:remove(e, M5),
M3 = maps:remove(d, M4),

Mapsから値を探して取得する - maps:find/2

{ok,_} = maps:find(e, M5),
error  = maps:find(g, M5),

Mapsに指定のキーがあるか確認する - maps:is_key/2

true  = maps:is_key(a, M5),
false = maps:is_key(x, M5),

Mapsに登録されたデータ数を得る - size/1

5 = maps:size(M5),
1 = maps:size(M1),
0 = maps:size(M0),

Mapsに登録されたキーのリストを得る - keys/1

[a,b,c] = lists:sort( maps:keys(M3) ),

Mapsに登録された値のリストを得る - values/1

[1,2,3] = lists:sort( maps:values(M3) ),

Mapsをキーと値のタプルのリストにする - to_list/1

[{a,1},{b,2}] = maps:to_list(M2),

キーと値のタプルのリストからMapsを得る - from_list/1

M2 = maps:from_list([{a,1}, {b,2}]),

Mapsに任意のふるいをかけて新しいMapsを作る - filter/2

FilterdM = maps:from_list([{a,1},{c,3}]),
FilterdM = maps:filter(fun(_K, V) -> (V rem 2) =:= 1 end, M3),

Mapsに畳み込み演算を行う - fold/3

6 = maps:fold(fun(_, V, Acc) when is_integer(V) -> V+Acc;
                 (_, _, Acc) -> Acc
              end,
              0,
              M5),

Mapsの各値に対して任意の加工を行った結果を返す - map/2

NewMap = maps:from_list([{a,10},{b,20},{c,30}]),
NewMap = maps:map(fun(_K, V) -> V*10 end, M3),

2つのMapsをマージする - merge/2

% 同じキーがある場合、2つ目のMapsの値を優先する

MapA  = maps:from_list([{a,10},{b,20}]),
MapB  = maps:from_list([{a,1}, {c,30}]),
MapAB = maps:from_list([{a,1}, {b,20}, {c,30}]),
MapAB = maps:merge(MapA, MapB),

Mapsの任意のキーの値を更新する - update/3

UpdateMap1 = maps:from_list([{a,1},{b,2}]),
UpdateMap2 = maps:from_list([{a,10},{b,2}]),
UpdateMap2 = maps:update(a,10, UpdateMap1),

Mapsの任意のキーの値を関数を用いて更新する - update_with/3

UpdateMap2 = maps:update_with(a, fun(V) -> V*10 end, UpdateMap1),

update_with/3から、もしキーがなかった場合のデフォルト値を指定できる関数 - update_with/4

UpdateMap3 = maps:from_list([{a,1},{b,2},{c,3}]),
UpdateMap3 = maps:update_with(c, fun(V) -> V*10 end, 3, UpdateMap1),

Mapsから指定のキーのみでMapsを再作成する - with/2

WithKeys = [a,c],
WithMap1 = maps:from_list([{a,1},{b,2},{c,3}]),
WithMap2 = maps:from_list([{a,1},      {c,3}]),
WithMap2 = maps:with(WithKeys, WithMap1),

with/2と逆に指定のキー以外でMapsを再作成する - without/2

WithMap3 = maps:from_list([{b,2}]),
WithMap3 = maps:without(WithKeys, WithMap1),

Mapsから任意のキーの値と、そのキーを削除したMapsを返す - take/2

{2, M1} = maps:take(b, M2),
kayama0fa
何事も、無理に頑張らず、コツコツやっていきます。
ymir
独自のテクノロジーで、パフォーマンスを追求したメール配信システムを中心にメッセージングソリューションを提供するSaaSベンダーです。
https://www.ymir.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした