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

#contents
** マップサービス [#bb5efca2]
css.container.EnumerableMap サービスを利用します。create コンストラクタにキーと値の型を指定します。

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

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

//変更不可のマップも作成できます。

** 利用できるキー、値の型 [#s92b2541]

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

値には次の型が利用できます。any に入力できる型。exception および struct の場合にはその型およびその派生型。値に void も利用できます。
** キー、値の追加 [#x160c023]
 oMap.put("hoge", "geho")

** 値の取得 [#r7712855]
キーを指定して値を取得します。
 oValue = oMap.get("hoge")

** 削除 [#u5f09f2f]
キーを指定して削除します。返り値は値です。
 oValue = oMap.remove("hoge")

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

** キーの有無 [#y3d0d071]
 If oMap.containsKey("hoge") Then

** 値の有無 [#m30e6ba3]
 If oMap.containsValue("geho") Then

** 空にする [#a303de01]
 oMap.clear()

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

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

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

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

** キー、値ペアーの列挙 [#va9992e9]
キーと値をセットにして css.beans.Pair struct として順にアクセスします。
 oPairEnume = oMap.createElementEnumeration(False)
 While oPairEnume.hasMoreElements()
   aPair = oPairEnume.nextElement()
   sKey = aPair.First
   oValue = aPair.Second
 WEnd
** type 型 [#gcd282e2]
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