6.32. kink/container/MAP

6.32.1. map型

mapは、キー/値のコンテナの抽象型である。実装が定義する同値関係において、キーはmapの中で一意でなければならない。

ordered_mapは、キーの全順序をサポートするmapの部分型である。kink/container/ORDERED_MAPを見よう。

6.32.1.1. Map.get(Key ...[$if_absent])

getは、Keyに同値なキーに関連付けられた値を戻す。

Mapがそのようなキーを持っていない場合、getは、$if_absentを末尾呼び出しする。$if_absentのデフォルト値は、例外を投げる関数である。

事前条件

Keyはキーの同値関係の定義域に含まれなければならない。

$if_absentはサンクでなければならない。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
stdout.print_line(Map.get('one').repr)  # => 1
stdout.print_line(Map.get('five'){ 'big' }.repr) # => "big"

Map.get('five')
# Output:
#   ...
#   -- main exception
#   ,,,
#   {builtin:kink-mods/kink/container/FLAT_MAP.kn L138 C9 raise} { -->raise('{}: no such key: {}'.format(Desc Key.repr)) }
#   Flat_map.get(Key ...[$if_absent]): no such key: "five"

6.32.1.2. Map.get_opt(Key)

If `Map` has a key equivalent to `Key`, `get_opt` returns [Val] where `Val` is the value associated with the key.

Mapがそのようなキーを持っていない場合、get_optは[]を戻す。

事前条件

Keyはキーの同値関係の定義域に含まれなければならない。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
stdout.print_line(Map.get_opt('one').repr)  # => [1]
stdout.print_line(Map.get_opt('five').repr) # => []

6.32.1.3. Map.have_key?(Key)

have_key?は、Mapが、Keyに同値なキーを持っているかどうかを戻す。

事前条件

Keyはキーの同値関係の定義域に含まれなければならない。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
stdout.print_line(Map.have_key?('one').repr)  # => true
stdout.print_line(Map.have_key?('five').repr) # => false

6.32.1.4. Map.size

sizeは、Mapに含まれるキー/値ペアの数を、整数のnum値として戻す。

6.32.1.5. Map.any?

any?は、Mapが1個以上のエントリを含んでいるかどうかを戻す。

6.32.1.6. Map.set(Key Val)

setは、Keyをキーとして、Valを値として関連付ける。

MapがKeyと同値のキーを持っていない場合、setはKeyとValの間に新しい関連付けを作る。

MapがKeyと同値のキーをすでに持っている場合、setはその関連付けをValで上書きする。その場合、setは関連付けをKeyで上書きするかもしれないし、古いキーを持ち続けるかもしれない。

事前条件

Keyはキーの同値関係の定義域に含まれなければならない。

事後条件

Map.have_key?(Key)はtrueになる。

Map.get(Key)はValになる。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3)
Map.set('four' 4)
Map.set('one' 'ONE')
stdout.print_line(Map.repr) # => (flat_map "four"=>4 "one"=>"ONE" "three"=>3 "two"=>2)

6.32.1.7. Map.pop_at(Key)

pop_atは、キーがKeyと同値であるキー/値ペアを削除して、関連付けられた値を戻す。

事前条件

Keyはキーの同値関係の定義域に含まれなければならない。

事後条件

Map.have_key?(Key)はfalseになる。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
stdout.print_line(Map.pop_at('four').repr) # => 4
stdout.print_line(Map.repr) # => (flat_map "one"=>1 "three"=>3 "two"=>2)

6.32.1.8. Map.clear

clearは、すべてのキー/値ペアをMapから削除する。

6.32.1.9. Map.key_iter

key_iterは、キーのiterを戻す。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
Map.key_iter.each{(:K)
  stdout.print_line(K.repr)
}
# Output:
#   "four"
#   "one"
#   "three"
#   "two"

6.32.1.10. Map.pair_iter

pair_iterは、すべてのキー/値ペアについてのvec=[Key Value]のiterを戻す。

:FLAT_MAP.require_from('kink/container/')

:Map <- FLAT_MAP.of('one' 1 'two' 2 'three' 3 'four' 4)
Map.pair_iter.each{([:K :V])
  stdout.print_line('{} => {}'.format(K.repr V.repr))
}
# Output:
#   "four" => 4
#   "one" => 1
#   "three" => 3
#   "two" => 2

6.32.1.11. X == Y

== 演算子、またはop_eqメソッドは、ふたつのmap、XとYが同値であるかどうかを戻す。

ふたつのmapは、次の条件が満たされるときに同値である。

• XとYが同値なkeyの集合を持っている。

• XのそれぞれのキーKについて、X.get(K) == Y.get(K)がtrueである。

事前条件

Yはmapでなければならない。

XとYのキーの同値関係は同一でなければならない。

XとYの値は、 == 演算子で相互に比較できなければならない。

6.32.2. MAP.is?(Val)

is?はValがmapであるかどうかを戻す。