Top > OOoBasic > Generic > EnumerableMap

マップ Edit

UNO の型のキーと値を保持するマップ。連想型配列、辞書、ハッシュなどとも呼ばれるようなあれ。OOo Basic にはこの種類のコンテナが無いため便利です。3.2 から実装されていますが、OOo Basic では type 型に問題があるため 3.4 から利用できます。

マップサービス Edit

css.container.EnumerableMap サービスを利用します。create コンストラクタにキーと値の型を指定します。

oMap = com.sun.star.container.EnumerableMap.create("string", "string")

作成後にキーの型は KeyType 属性から、値の型は ValueType 属性から取得できます。

利用できるキー、値の型 Edit

キーには以下の型が利用できます。boolean、char、float、integer、string、type、unsigned hyper。void な値は不可。 enum のときには型が同じもののみキーになれます。 インターフェース型の場合にはそのインターフェースがクエリできるオブジェクトがキーになれます。

値には次の型が利用できます。any に入力できる型。exception および struct の場合にはその型およびその派生型。値に void も利用できます。

キー、値の追加 Edit

oMap.put("hoge", "geho")

値の取得 Edit

キーを指定して値を取得します。

oValue = oMap.get("hoge")

削除 Edit

キーを指定して削除します。返り値は値です。

oValue = oMap.remove("hoge")

キーが存在しないときには css.container.NoSuchElementException が発生します。

キーの有無 Edit

If oMap.containsKey("hoge") Then

値の有無 Edit

If oMap.containsValue("geho") Then

空にする Edit

oMap.clear()

全キーの列挙 Edit

全てのキーに順にアクセスします。createKeyEnumeration メソッドの引数には作成された列挙型オブジェクトがマップから切り離された状態にするかどうかを指定します。マップの内容を変更する可能性がある場合には注意して指定してください。

oKeyEnume = oMap.createKeyEnumeration(False)
While oKeyEnume.hasMoreElements()
  sKey = oKeyEnume.nextElement()
  '...
WEnd

全値の列挙 Edit

全ての値に順にアクセスします。createValueEnumeration メソッドの引数はキーの時と同じです。

oValueEnume = oMap.createValueEnumeration(False)
While oValueEnume.hasMoreElements()
  oValue = oValueEnume.nextElement()
  ' ...
WEnd

キー、値ペアーの列挙 Edit

キーと値をセットにして css.beans.Pair struct として順にアクセスします。

oPairEnume = oMap.createElementEnumeration(False)
While oPairEnume.hasMoreElements()
  aPair = oPairEnume.nextElement()
  sKey = aPair.First
  oValue = aPair.Second
WEnd

type 型 Edit

3.4 からは type 型の値を明示的にメソッドの型にとる場合には型名を文字列として指定できます。

oMap = com.sun.star.container.EnumerableMap.create("string", "int")

OOo Basic での type 型の値は com.sun.star.reflection.XIdlClass です。3.4 からこの値を明示的に type 型指定できます。

値を設定するときにエラーが出る場合は次のように値の型を指定してあげてください。

oMap = com.sun.star.container.EnumerableMap.create("string", "long")
oMap.put("fuga", CreateUnoValue("long", 1))
msgbox oMap.get("fuga")

Basic では整数値は値が入る最小サイズの型に変換されてしまうためです。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes