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であるかどうかを戻す。