collection.findIndex( ) メソッドは、 methodName 引数で指定したメソッドを各要素に対して適用したときに、true を返すコレクション内の最初の値のインデックスを返します。コレクションのどの要素もtrue に評価されなかった場合、メソッドは-1 を返します。
注: このメソッドは元のコレクションは変更しません。
デフォルトでは、collection.findIndex( ) はコレクション全体を検索します。オプションとして、startFrom 引数に検索を開始する要素のインデックスを渡すこともできます。
- startFrom がコレクションのlength 以上の場合、-1 が返されます。これは検索が開始しなかったことを意味します。
- startFrom が負の値の場合、それはコレクションの終端からのオフセットであるとみなされます(startFrom:=startFrom+length)。
注: startFrom が負の値であっても、コレクションは左から右へと検索がされます。 - startFrom が0 の場合、コレクション全体が検索されます(デフォルト)。
methodName 引数には、コレクションの要素を評価するのに使用するメソッドの名前を渡します。必要であればparam 引数(任意)に引数を渡します。methodName 引数で指定したメソッドはどのようなテストでも実行でき、引数を使用してもしなくても構いません。メソッドは$1 にObject 引数を引き受け、条件を満たす最初の要素の$1.result をtrue に設定しなければなりません。
methodName 引数は以下の引数を受け取ります:
- $1.value: 評価する要素の値
- $2: param
- $N...: param2...paramN
methodName 引数は以下の引数を設定します:
- $1.result (ブール): 要素の値が検索条件に合致する場合にはtrue。
- $1.stop (ブール、任意): メソッドコールバックを中止する場合にはtrue。返された値は最後に計算されたものになります。
コレクション内で最初に合致する都市名の位置を探したい場合を考えます:
C_COLLECTION($c)
C_LONGINT($val2;$val3)
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex("FindCity";"Clanton")
$val3:=$c.findIndex($val2+1;"FindCity";"Clanton")
FindCity メソッドのコードは以下のようになります:
C_OBJECT($1)
C_TEXT($2)
$1.result:=$1.value.name=$2