6.33. kink/container/ORDER_MAP

6.33.1. order_map型

order_mapは、キーの全順序をサポートするmapの部分型である。キーの同値関係は、全順序から導出される。

キーの全順序関係

キーの全順序関係up-toは、キーの定義域内のすべてのX, Y, Zについて、次の条件を満たさなければならない。

• 反射律: X up-to X

• 推移律: if X up-to Y && Y up-to Z then X up-to Z

• 反対称律: if X up-to Y && Y up-to X then X equivalent-to Y

• 狭義の連結律: X up-to Y || Y up-to X

反対称律の条件は、キーの同値関係equivalent-toの定義でもある。

メソッド

order_mapの値は、mapのメソッドすべてを持つ。

加えて、order_map値は下記のメソッドを持つ。

6.33.1.1. Map.order

orderは、Mapのキーの全順序関係の関数を戻す。

結果の関数$up_to?は、ふたつの引数X, Yを取る関数である。 `up-to?(X Y)` は `X up-to Y` のbool値を戻す。ここで、 `up-to` はキーの全順序関係である。

6.33.1.2. Map.key_iter(...[Min_key])

key_iterは、順序付けされたキーのiterを戻す。Min_keyが渡された場合、iterはMin_keyと同値かより大きいキーを含む。Min_keyが渡されない場合、iterはMapのすべてのキーを含む。

order_mapのkey_iterメソッドは、map型のkey_iterの契約を拡張する。

事前条件

Min_keyはキーの全順序の定義域に含まれなければならない。

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

:Map <- TREE_MAP.of(
  'foo' 'FOO'
  'bar' 'BAR'
  'baz' 'BAZ'
  'qux' 'QUX'
  'grault' 'GRAULT'
)
Map.key_iter.each{(:K)
  stdout.print_line(K.repr)
}
# Output:
#   "bar"
#   "baz"
#   "foo"
#   "grault"
#   "qux"

Map.key_iter('f').each{(:K)
  stdout.print_line(K.repr)
}
# Output:
#   "foo"
#   "grault"
#   "qux"

6.33.1.3. Map.pair_iter(...[Min_key])

pair_iterは、キーで順序付けられた[Key Val]のペアのiterを戻す。Min_keyが渡された場合、iterは、Min_keyと同値かより大きいキーのペアを含む。Min_keyが渡されない場合、iterはMapのすべてのキー/値ペアを含む。

order_mapのpair_iterメソッドは、map型のpair_iterの契約を拡張する。

事前条件

Min_keyはキーの全順序の定義域に含まれなければならない。

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

:Map <- TREE_MAP.of(
  'foo' 'FOO'
  'bar' 'BAR'
  'baz' 'BAZ'
  'qux' 'QUX'
  'grault' 'GRAULT'
)

Map.pair_iter.each{(:Pair)
  stdout.print_line(Pair.repr)
}
# Output:
#   ["bar" "BAR"]
#   ["baz" "BAZ"]
#   ["foo" "FOO"]
#   ["grault" "GRAULT"]
#   ["qux" "QUX"]

Map.pair_iter('f').each{(:Pair)
  stdout.print_line(Pair.repr)
}
# Output:
#   ["foo" "FOO"]
#   ["grault" "GRAULT"]
#   ["qux" "QUX"]

6.33.1.4. Map.front_key

front_keyは、順序で最初に来るキーを戻す。

事前条件

Mapは空であってはならない。

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

:Map <- TREE_MAP.of(
  'foo' 'FOO'
  'bar' 'BAR'
  'baz' 'BAZ'
  'qux' 'QUX'
  'grault' 'GRAULT'
)
stdout.print_line(Map.front_key.repr) # => "bar"

6.33.1.5. Map.back_key

front_keyは、順序で最後に来るキーを戻す。

事前条件

Mapは空であってはならない。

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

:Map <- TREE_MAP.of(
  'foo' 'FOO'
  'bar' 'BAR'
  'baz' 'BAZ'
  'qux' 'QUX'
  'grault' 'GRAULT'
)
stdout.print_line(Map.back_key.repr) # => "qux"

6.33.2. ORDER_MAP.is?(Val)

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

6.33.3. ORDER_MAP.mixin

mixinは、order_mapの下記のメソッドのデフォルト実装を提供するミックスイントレイトを戻す。

• eq

• get

• have_key?

• any?

• key_iter

• op_eq / `==` 演算子