クラス配列のオブジェクト拡張
配列オブジェクトは、値のリストまたはシーケンスを含んでいます。
値は、配列内の位置(配列インデックス)で指定され、位置1が最初の要素になります。
配列は、値のリストを括弧で囲むことで作成されることが多い。事例:
veg := ["Asparagus", "Broccoli", "Cucumber"] Loop veg.Length MsgBox veg[A_Index]
負のインデックスは、要素を逆にアドレスするために使用することができ、-1は最後の要素、-2は2番目の最後の要素、といった具合です。
範囲外の配列インデックス(ゼロや絶対値が配列の長さより大きい場合など)を使用しようとすると、エラーとみなされ、IndexErrorがスローされます。配列に新しい要素を追加するには、InsertAtまたはPushを呼び出すのが最適です。事例:
users := Array() users.Push A_UserName MsgBox users[1]
また、Lengthに大きな値を代入することで、配列を拡張することができる。これにより、有効なインデックスが変わりますが、Hasは新要素に価値がないことを示します。値のない要素は、通常、バリアドコールや バリアド関数によって使用されるが、どのような目的にも使用できる。
"Array "はクラスそのものなので、以下ではあらゆる配列オブジェクトのプレースホルダとして "ArrayObj "を使用します。
配列オブジェクトは、オブジェクトから継承されたメソッドとプロパティに加え、以下の定義済みのメソッドとプロパティを持ちます。
指定された値を含む新しい配列を作成します。
ArrayObj := Array(Value, Value2, ..., ValueN) ArrayObj := Array.Call(Value, Value2, ..., ValueN)
パラメータは__Newで定義します。
配列のシャローコピーを返します。
Clone := ArrayObj.Clone()
配列の全要素が新しい配列にコピーされます。オブジェクトの参照はコピーされますが(通常の代入と同様)、オブジェクトそのものはコピーされません。
Obj.Cloneに準じて、自プロパティ、自メソッド、ベースはコピーされます。
配列の要素の値を削除し、インデックスに値を残さないようにします。
RemovedValue := ArrayObj.Delete(Index)
型:整数
有効な配列のインデックス。
型:任意
This method returns the removed value (blank if none).
This method does not affect the Length of the array.
Indexが範囲外の場合、ValueErrorが投げられる。
指定されたインデックスにある値、またはデフォルト値を返します。
Value := ArrayObj.Get(Index , Default)
この方法では、次のようなことができます。
ArrayObj.Default
が定義されていれば、その値を返す。Defaultが省略された場合、__Itemが呼び出されないことを除いてArrayObj[Index]
と同等となる。
Returns a non-zero number if the index is valid and there is a value at that position.
HasIndex := ArrayObj.Has(Index)
指定された位置に1つまたは複数の値を挿入します。
ArrayObj.InsertAt(Index, Value1 , Value2, ... ValueN)
型:整数
Value1を挿入する位置を指定します。それ以降の値は、Index+1、Index+2 などに挿入されます。0を指定すると、Length+ 1を指定したのと同じになります。N
型:任意
挿入する1つまたは複数の値。値の配列を挿入するには、次のように渡します。 theArray*
を最後のパラメータとして指定します。
InsertAtは、RemoveAtと対になるものです。
これまでIndexの右側にあったアイテムは、右側に移動します。欠落したパラメータも挿入されるが、値はない。事例:
x := [] x.InsertAt(1, "A", "B") ; => ["A", "B"] x.InsertAt(2, "C") ; => ["A", "C", "B"] ; 欠けている要素はそのままです。 x := ["A", , "C"] x.InsertAt(2, "B") ; => ["A", "B", , "C"] x := ["C"] x.InsertAt(1, , "B") ; => [ , "B", "C"]
Indexが-ArrayObj.Length
よりも小さいか、ArrayObj.Length + 1
よりも大きい場合はValueErrorがスローされます。例えば、3つの項目からなる配列の場合、Indexは-3から4までの間でなければならない。
配列の最後の要素を削除して返します。
RemovedValue := ArrayObj.Pop()
以下はすべて同等です。
RemovedValue := ArrayObj.Pop() RemovedValue := ArrayObj.RemoveAt(ArrayObj.Length) RemovedValue := ArrayObj.RemoveAt(-1)
配列の末尾に値を追加します。
ArrayObj.Push(Value, Value2, ..., ValueN)
配列から項目を削除します。
RemovedValue := ArrayObj.RemoveAt(Index) ArrayObj.RemoveAt(Index, Length)
型:整数
削除する値(複数可)のインデックス。
型:整数
省略された場合は、1つの項目が削除されます。Otherwise, specify the length of the range of values to remove.
型:任意
Lengthが省略された場合は、削除された値が返される(ない場合は空白)。そうでない場合は、戻り値はありません。
RemoveAtはInsertAtの対になるものです。
Indexと Lengthで示される範囲が、配列の現在の範囲に完全に収まっていない場合、ValueErrorがスローされます。
Posの右にある残りの項目は、Length(省略時は1)だけ左にシフトされます。事例:
x := ["A", "B"] MsgBox x.RemoveAt(1) ; A MsgBox x[1] ; B x := ["A", , "C"] MsgBox x.RemoveAt(1, 2) ; 1 MsgBox x[1] ; C
配列の要素を列挙します。
For Value in ArrayObj
For Index, Value in ArrayObj
新しい列挙者を返します。このメソッドは通常、直接呼び出されることはありません。その代わり、配列オブジェクトは直接forループに渡され、forループは__Enumを一度呼び出し、ループの各繰り返しで列挙器を一度呼び出します。列挙者を呼び出すたびに、次の配列要素が返されます。forループの変数は、列挙者のパラメータに対応しており、次のようになっています。
配列の長さを取得または設定します。
Length := ArrayObj.Length
ArrayObj.Length := Length
長さには、価値のない要素も含まれます。長さを長くすると、どのインデックスが有効とみなされるかが変わりますが、新しい要素には価値がありません(Hasで示されます)。長さを小さくすると、配列は切り捨てられます。
MsgBox ["A", "B", "C"].Length ; 3 MsgBox ["A", , "C"].Length ; 3
配列の現在の容量を取得または設定します。
MaxItems := ArrayObj.Capacity
ArrayObj.Capacity := MaxItems
MaxItems is an integer representing the maximum number of elements the array should be able to contain before it must be automatically expanded. If setting a value less than Length, elements are removed.
値のない要素が要求されたときに返されるデフォルト値を定義します。
ArrayObj.Default := Value
このプロパティは、実はデフォルトでは存在せず、スクリプトで定義することができます。If defined, its value is returned by __Item or Get if the requested element has no value, 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.
デフォルト値を設定しても、インデックスが範囲外である場合にエラーが発生することは防げません。
配列の要素の値を取得または設定します。
Value := ArrayObj[Index]
Value := ArrayObj.__Item[Index]
ArrayObj[Index] := Value
ArrayObj.__Item[Index] := Value
Index is an integer representing a valid array index; that is, an integer with absolute value between 1 and Length (inclusive). 負のインデックスは、-1が最後の要素、-2が2番目の最後の要素というように、要素を逆にアドレスするために使用することができます。Attempting to use an index which is out of bounds (such as zero, or if its absolute value is greater than the Length of the array) is considered an error and will cause an IndexError to be thrown.
プロパティ名 __Item は、上記のように通常は省略されますが、プロパティをオーバーライドする際に使用されます。