class Map extends 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から継承されたメソッドやプロパティに加え、以下のような定義済みのメソッドやプロパティを持ちます。
Mapを作成し、項目を設定する。
MapObj := Map(Key1, Value1, Key2, Value2, ...)
MapObj := Map.Call(Key1, Value1, Key2, Value2, ...)
これは、MapObj[Key] := Value
で各項目を設定することと同じですが、__Itemが呼ばれないことと、1回の呼び出しで複数回展開しないように容量が自動的に調整されることが異なります。
パラメータは__Newで定義します。
マップからすべてのキーとバリューのペアを削除します。
MapObj.Clear()
マップの浅いコピーを返します。
Clone := MapObj.Clone()
すべてのキーとバリューのペアが新しいマップにコピーされます。オブジェクトの参照はコピーされますが(通常の代入と同様)、オブジェクトそのものはコピーされません。
Obj.Cloneに準じて、自プロパティ、自メソッド、ベースはコピーされます。
マップからキーとバリューのペアを削除します。
RemovedValue := MapObj.Delete(Key)
任意の1つのキーです。マップにこのキーが含まれていない場合、UnsetItemErrorが投げられる。
型:任意
This method returns the removed value.
キーに関連する値、またはデフォルト値を返します。
Value := MapObj.Get(Key , Default)
この方法では、次のようなことができます:
MapObj.Default
が定義されている場合、その値を返します。Defaultが省略された場合、__Itemが呼び出されないことを除けばMapObj[Key]
と同等である。
指定されたキーがマップ内に関連する値を持つ場合はtrueを、そうでない場合はfalseを返します。
MapObj.Has(Key)
0個以上の項目を設定する。
MapObj.Set(Key, Value, Key2, Value2, ...)
これは、MapObj[Key] := Value
で各項目を設定することと同じですが、__Itemが呼ばれないことと、1回の呼び出しで複数回展開しないように容量が自動的に調整されることが異なります。
型:オブジェクト
This method returns the Map.
キーとバリューのペアを列挙します。
For Key , Value in MapObj
新しい列挙者を返します。このメソッドは通常、直接呼び出されることはありません。その代わり、マップオブジェクトは直接forループに渡され、forループは__Enumを一度呼び出し、ループの各繰り返しで列挙器を一度呼び出します。列挙者を呼び出すたびに、次のキーや値が返されます。forループの変数は、列挙者のパラメータに対応しており、次のようになっています:
マップに存在するキーとバリューのペアの数を取得します。
Count := MapObj.Count
マップの現在の容量を取得または設定します。
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. 現在のキーと値のペアの数より少ない値を設定した場合、その数が代わりに使用され、未使用のスペースは解放される。
マップの大文字と小文字の区別の設定を取得または設定します。
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):キーのルックアップは大文字と小文字を区別します。これは初期設定です。
Off or 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. 動的プロパティや メタファンクションなど、通常の方法で実装できますが、どのキーが照会されたかを判断するには、代わりに__ItemやGetをオーバーライドする必要があります。
キーと値のペアの値を取得または設定します。
Value := MapObj[Key]
Value := MapObj.__Item[Key]
MapObj[Key] := Value
MapObj.__Item[Key] := Value
値を取得する場合、Keyは他の値と以前に関連づけられたユニークな値でなければならない。An UnsetItemError is thrown if Key has no associated value within the map, unless a Default property is defined, in which case its value is returned.
値を割り当てる際、Keyには Valueと関連付ける任意の値、言い換えれば、Valueに後からアクセスするためのキーを指定することができる。Floatキーは自動的に String に変換されます。
プロパティ名 __Item は、上記のように通常は省略されますが、プロパティをオーバーライドする際に使用されます。