Erlang の maps モジュールを一通り試す - その2
OTP 17.0 から maps モジュールが追加された。一通り試す。
公式URL:http://erlang.org/doc/man/maps.html
is_key/2 関数
is_key(Key, Map) -> boolean()
Types
Key = term() Map = map()
マップMap
にキーKey
が含まれている場合はtrueを返し、キーが含まれていない場合はfalseを返す。
Example:
> M = #{a=>1,b=>2,c=>3}. #{a => 1,b => 2,c => 3} > maps:is_key(a, M). true > maps:is_key(f, M). false
Map
がマップでない場合、呼び出しは{badmap, Map}
例外で失敗する。
> L = [{a,1},{b,2},{c,3}]. [{a,1},{b,2},{c,3}] > maps:is_key(a, L). ** exception error: {badmap,[{a,1},{b,2},{c,3}]} in function maps:is_key/2 called as maps:is_key(a,[{a,1},{b,2},{c,3}])
iterator/1 関数
iterator(Map) -> Iterator
Types
Map = #{Key => Value} Iterator = iterator(Key, Value)
map:next/1
関数を使用することによって、マップ内のキーと値の関連付けをトラバースするために使用できるマップイテレータIterator
を返す。 マップを反復処理する場合、マップのサイズに関係なく、メモリ使用量が制限されることが保証される。
Map
がマップでない場合、呼び出しは{badmap, Map}
例外で失敗する。
Example:
> M = #{ a => 1, b => 2}. #{a => 1,b => 2} > I = maps:iterator(M). [0|#{a => 1,b => 2}] > {K1, V1, I2} = maps:next(I). {a,1,{b,2,none}} > {K2, V2, I3} = maps:next(I2). {b,2,none} > maps:next(I3). none
keys/1 関数
keys(Map) -> Keys
Types
Map = #{Key => term()} Keys = [Key]
Map内にあるキーの完全なリストを任意の順序で返す。
Mapがマップでない場合、呼び出しは{badmap, Map}
例外で失敗する。
Example:
> M = #{a=>1, b=>2}. #{a => 1,b => 2} > maps:keys(M). [a,b]
map/2 関数
map(Fun, MapOrIter) -> Map
Types
Fun = fun((Key, Value1) -> Value2) MapOrIter = #{Key => Value1} | iterator(Key, Value1) Map = #{Key => Value2}
マップの各値を関数Fun
で変更する。
MapOrIterのキーKey
と値のValue1
の関連付けごとに関数F(Key, Value1)
を任意の順序で呼び出すことにより、新しいマップMap
を作成する。 関数fun Fun/2
は、新しいマップMap
のキーKey
に関連付けられる値Value2
を返す必要がある。
MapOrIterがマップまたは有効なイテレーターでない場合、{badmap, Map}
例外で呼び出しが失敗する。Fun
がアリティ2の関数でない場合、badarg
で呼び出しが失敗する。
Example:
> M = #{a=>1, b=>2}. #{a => 1,b => 2} > Fun = fun(K, V1) when is_atom(K) -> V1 * 2 end. #Fun<erl_eval.13.126501267> > maps:map(Fun,M). #{a => 2,b => 4}
merge/2 関数
merge(Map1, Map2) -> Map3
Types
Map1 = Map2 = Map3 = map()
2つのマップを1つのマップMap3
にマージする。 両方のマップに同じキーが存在する場合、Map1
の値はMap2
の値に置き換えらる。
Map1
またはMap2
がマップでない場合、呼び出しは{badmap, Map}
例外で失敗する。
Example:
> M1 = #{a => 1, b => 2, c => 3}. #{a => 1,b => 2,c => 3} > M2 = #{c => 10, d => 11, e => 12}. #{c => 10,d => 11,e => 12} > maps:merge(M1, M2). #{a => 1,b => 2,c => 10,d => 11,e => 12}
new/0 関数
new() -> Map
Types
Map = #{}
新しい空のマップを返す。
Example:
> maps:new(). #{}