collection.orderByMethod( ) メソッドはmethodName 引数で指定したメソッドを通して定義された順番で並べ替えされたコレクションの要素を全て格納する新しいコレクションを返します。
このメソッドはシャロウ・コピー、つまり両方のコレクション内のオブジェクトあるいはコレクションが同じ参照を共有するコピーを返します。元のコレクションが共有コレクションであった場合、返されたコレクションもまた共有コレクションになります。
注: このメソッドは元のコレクションは変更しません。
methodName 引数には、二つの値を比較して、最初の値が二つ目の値より低い場合には$1.result にtrue を返す比較メソッドの名前を渡します。必要であればmethodName 引数に追加の引数を渡すこともできます。
- methodName 引数は以下の引数を受け取ります:
- $1 (オブジェクト):
- $1.value (任意の型): 比較する最初の要素の値
- $1.value2 (任意の型): 比較する二つ目の要素の値
- $2...$N (任意の型): 他の引数
- methodName 引数は以下の引数を設定します:
- $1.result (ブール): $1.value < $1.value2 の場合にはtrue を、それ以外の場合にはfalse
文字列のコレクションを、アルファベット順ではなく、数値順に並べ替えをしたい場合を考えます:
NumAscending メソッドのコードは以下のようになります:
$1.result:=Num($1.value)<Num($1.value2)
文字列のコレクションをそれらのlengthで並べ替えをしたい場合を考えます:
C_COLLECTION($fruits)
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod("WordLength")
WordLength のコードは以下のようになります:
$1.result:=Length(String($1.value))>Length(String($1.value2))