無題の備忘録

IT技術について調べたことや学んだこと、試したこと記録するブログです。Erlang、ネットワーク、 セキュリティ、Linux関係のものが多いです。

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().
#{}