メインコンテンツまでスキップ
バージョン: 開発中

Find in array

Find in array ( array ; value {; start} ) : Integer

引数説明
arrayArray検索を行う配列
valueExpression配列タイプと同じタイプの検索値
startInteger検索を開始する配列要素番号
戻り値Integer検索値が見つかった最初の要素番号

説明

Find in array コマンドは、arrayから引数valueと同じものを検索し、最初に発見された要素の番号を返します。

Find in array コマンドは、タイプがテキスト、数値、日付、ポインタ、オブジェクトまたはブールの配列に使用できます。arrayタイプとvalueのタイプは、必ず同じにしてください。

value 引数の値は、検索する要素と完全に一致している必要があります(等号演算子と同じ同じルールです。 基本演算子 参照)。同じ値を発見できない場合、Find in array コマンドは-1を返します。

注意: オブジェクト型配列の場合、value 引数に対して使用できるのはオブジェクト参照のみです。

startを指定すると、その番号の要素から検索を始めます。start引数を指定しない場合、コマンドは第1要素から検索を開始します。

例題 1

以下のプロジェクトメソッドは、文字列またはテキスト配列のポインタを引数として受け、配列から空の要素をすべて削除します:

  // CLEAN UP ARRAY プロジェクトメソッド
  // CLEAN UP ARRAY (ポインタ)
  // CLEAN UP ARRAY (->テキストまたは文字配列)
 
 var $1 : Pointer
 REPEAT
    $vlElem:=Find in array($1->;"")
    If($vlElem>0)
       DELETE FROM ARRAY($1->;$vlElem)
    End if
 Until($vlElem<0)

このプロジェクトメソッド実装後、以下のように記述できます:

 ARRAY TEXT(atSomeValues;...)
  // ...
  // 配列を使用した処理を行う
  // ...
  // 空文字の要素を削除する
 CLEAN UP ARRAY(->atSomeValues)

例題 2

次のプロジェクトメソッドは、最初の引数で渡した配列(ポインタ指定)中、第二引数で渡した変数やフィールド(ポインタ指定)の値に一致する最初の要素を選択します:

  // SELECT ELEMENT プロジェクトメソッド
  // SELECT ELEMENT (ポインタ; ポインタ)
  // SELECT ELEMENT ( ->テキストまたは文字配列; -> テキストまたは文字変数またはフィールド)
 
 $1->:=Find in array($1->;$2->)
 If($1->=-1)
    $1->:=0 // 値が要素中に見つからない場合、要素を選択しない
 End if

このプロジェクトメソッド実装後、以下のように記述できます:

  // asGender ポップアップメニュオブジェクトメソッド
 Case of
    :(Form event code=On Load)
       SELECT ELEMENT(->asGender;->[People]Gender)
 
 End case

注: この例では配列の選択された要素を使用します。選択された要素は、配列内の要素数が32,767個を超える場合には意味をなさない点に注意して下さい(配列とフォームオブジェクトを参照して下さい)。この場合、Find in arrayの結果を保存するためには倍長整数変数を使用する必要があります。

例題 3

オブジェクト参照を探したい場合を考えます:

 ARRAY OBJECT($objects;100)
 $o1:={a10;b"xyz"}
 $o2:={a10;b"xyz"}
 
 $objects{20}:=$o1
 var $p : Integer
 
 $p:=Find in array($objects;$o1) //$p = 20
 $p:=Find in array($objects;$o2) //$p = -1 
 $p:=Find in array($objects;{a10;b"xyz"}) //$p = -1

参照

Count in array
DELETE FROM ARRAY
Find in sorted array
INSERT IN ARRAY
Size of array

プロパティ

コマンド番号230
スレッドセーフである