Map Object

クラスは、拡張オブジェクトに割り当てられます。

Mapオブジェクトは、キーと呼ばれる1つの値の集合を、別の値の集合に関連付ける、またはマッピングします。キーとそのキーに対応する値をキー・バリュー・ペアと呼びます。マップには、任意の数のキーと値のペアを含めることができますが、各キーは一意でなければなりません。

キーは、整数オブジェクト参照、ヌル文字で終端された文字列のいずれかを指定することができます。文字列キーの比較は大文字と小文字を区別し、オブジェクトの比較は参照/アドレスで行います。Floatキーは自動的に String に変換されます。

マップの最も単純な使用方法は、暗黙の__Itemプロパティによってキーと値のペアを取得または設定することであり、マップオブジェクトの後に続く括弧の間にキーを記述するだけです。事例:

clrs := Map()
clrs["Red"] := "ff0000"
clrs["Green"] := "00ff00"
clrs["Blue"] := "0000ff"
for clr in Array("Blue", "Green")
    MsgBox clrs[clr]

"Map"はクラスそのものなので、以下ではあらゆるMapオブジェクトのプレースホルダとして "MapObj"を使用します。

Mapオブジェクトは、Objectから継承されたメソッドやプロパティに加え、以下のような定義済みのメソッドやプロパティを持ちます。

目次

静的メソッド

Call

Mapを作成し、項目を設定する。

MapObj := Map(Key1, Value1, Key2, Value2, ...)
MapObj := Map.Call(Key1, Value1, Key2, Value2, ...)

これは、MapObj[Key] := Valueで各項目を設定することと同じですが、__Itemが呼ばれないことと、1回の呼び出しで複数回展開しないように容量が自動的に調整されることが異なります。

パラメータは__Newで定義します。

メソッド

Clear

マップからすべてのキーとバリューのペアを削除します。

MapObj.Clear()

Clone

マップの浅いコピーを返します。

Clone := MapObj.Clone()

すべてのキーとバリューのペアが新しいマップにコピーされます。オブジェクトの参照はコピーされますが(通常の代入と同様)、オブジェクトそのものはコピーされません。

Obj.Cloneに準じて、自プロパティ、自メソッド、ベースはコピーされます。

Delete

マップからキーとバリューのペアを削除します。

RemovedValue := MapObj.Delete(Key)

パラメータ

Key

型:Integer, Object or String

任意の1つのキーです。マップにこのキーが含まれていない場合、UnsetItemErrorが投げられる。

戻り値

型:任意

This method returns the removed value.

Get

キーに関連する値、またはデフォルト値を返します。

Value := MapObj.Get(Key , Default)

この方法では、次のようなことができます。

Defaultが省略された場合、__Itemが呼び出されないことを除けばMapObj[Key]と同等である。

Has

指定されたキーがマップ内に関連する値を持つ場合はtrueを、そうでない場合はfalseを返します。

MapObj.Has(Key)

Set

0個以上の項目を設定する。

MapObj.Set(Key, Value, Key2, Value2, ...)

これは、MapObj[Key] := Valueで各項目を設定することと同じですが、__Itemが呼ばれないことと、1回の呼び出しで複数回展開しないように容量が自動的に調整されることが異なります。

戻り値

型:Object

This method returns the Map.

__Enum

キーとバリューのペアを列挙します。

For Key , Value in MapObj

新しい列挙者を返します。このメソッドは通常、直接呼び出されることはありません。その代わり、マップオブジェクトは直接forループに渡され、forループは__Enumを一度呼び出し、ループの各繰り返しで列挙器を一度呼び出します。列挙者を呼び出すたびに、次のキーや値が返されます。forループの変数は、列挙者のパラメータに対応しており、次のようになっています。

Key

型:Integer, Object or String

The key.

型:任意

The value.

__New

項目を設定します。セットに相当します。

MapObj.__New(Key, Value, Key2, Value2, ...)

このメソッドはCallをサポートするために存在し、直接呼び出すことは意図していません。建設と破壊をご覧ください。

属性

Count

マップに存在するキーとバリューのペアの数を取得します。

Count := MapObj.Count

Capacity

マップの現在の容量を取得または設定します。

MaxItems := MapObj.Capacity
MapObj.Capacity := MaxItems

MaxItems is an integer representing the maximum number of key-value pairs the map should be able to contain before it must be automatically expanded. 現在のキーと値のペアの数より少ない値を設定した場合、その数が代わりに使用され、未使用のスペースは解放される。

CaseSense

マップの大文字と小文字の区別の設定を取得または設定します。

CurrentSetting := MapObj.CaseSense
MapObj.CaseSense := NewSetting

CurrentSetting is NewSetting if assigned, otherwise On by default (but note that this property only retrieves the string variant of the current setting).

NewSetting is one of the following strings or integers (boolean):

On または 1 (true):Key lookups are case-sensitive. これは初期設定です。

Off または 0 (false):Key lookups are not case-sensitive, i.e. the letters A-Z are considered identical to their lowercase counterparts.

Locale: Key lookups are not case-sensitive according to the rules of the current user's locale. 例えば、英語や西欧のロケールでは、A~Zの小文字だけでなく、ÄやÜなどの非ASCII文字も小文字と同じように扱われることがほとんどです。Localeは、比較する文字列の性質によって、Offの1~8倍遅くなります。

このプロパティに代入しようとすると、Mapが空でない場合は例外が発生する。

デフォルト

キーが見つからない場合に返されるデフォルト値を定義します。

MapObj.Default := Value

このプロパティは、実はデフォルトでは存在せず、スクリプトで定義することができます。If defined, its value is returned by __Item or Get if the requested item cannot be found, instead of throwing an UnsetItemError. It can be implemented by any of the normal means, including a dynamic property or meta-function, but determining which key was queried would require overriding __Item or Get instead.

__Item

キーと値のペアの値を取得または設定します。

Value := MapObj[Key]
Value := MapObj.__Item[Key]
MapObj[Key] := Value
MapObj.__Item[Key] := Value

値を取得する場合、Keyは他の値と以前に関連づけられたユニークな値でなければならない。ただし、Defaultプロパティが定義されている場合は、その値が返されます。

値を割り当てる際、Keyには Valueと関連付ける任意の値、言い換えれば、Valueに後からアクセスするためのキーを指定することができる。Floatキーは自動的に String に変換されます。

プロパティ名 __Item は、上記のように通常は省略されますが、プロパティをオーバーライドする際に使用されます。