4D v16.3Find in sorted array |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Find in sorted array
Find in sorted array
Find in sorted array コマンドは array 引数で指定した配列内に、value 引数で指定した値と合致する要素が少なくとも一つある場合にはtrueを返します。また、合致した要素の位置を返す事もできます(任意)。Find in array コマンドとは異なり、array 引数で指定した配列が既にソート済みで、値の順番(位置)についての情報がある場合にのみ有効です(これにより、必要であればその個所に値を挿入することも可能です)。 array 引数で指定した配列は既にソート済みであり、> or < 引数で指定された順番と合致している必要があります(">"の記号は配列が昇順であることを、"<"の記号は配列が降順であることを意味します)。Find in sorted array コマンドはソートされている利点を生かしてバイナリ―サーチアルゴリズムを使用します。これは大きな配列においてはより効率的なアルゴリズムです(詳細な情報に関しては、Wikipediaの二分探索のページを参照して下さい)。しかしながら配列が適切にソートされていない場合には、結果が不正確になることがあります。 以下のいずれかに該当する場合、このコマンドはソートの指示を無視し、標準的なFind in arrayと同じように振る舞います(シーケンシャル探索を行い、value 引数で指定した値が見つからない場合にはposFirst と posLast 引数にそれぞれ-1が返されます):
コマンドがFalse を返した場合、posFirst 引数に返された値をINSERT IN ARRAYコマンドに渡すことによって、配列のソートを乱すことなくvalue 引数の値を配列内に挿入することができます。この方法の方が、新しい項目を配列の最後に挿入し、その後でその項目を正しい場所に移動させるためにSORT ARRAYコマンドを呼び出す方法より早いです。 posLast 引数に返された値とposFirst 引数に返された値を組み合わせることによって、value 引数と合致する配列内のそれぞれの要素に対して(For...End for ループを使用して)繰り返したり、同じ値が何個合致するかを探す事もできます(Count in arrayコマンドと同じですが、こちらの方が速いです)。 配列のソートを崩さないまま、必要であれば値を挿入したいという場合を考えます: C_LONGINT($pos) "test"で始まる文字列の合致件数を探し、それらを全て連鎖させた文字列を作成したい場合を考えます: C_LONGINT($posFirst ;$posLast)
参照
|
プロパティ
プロダクト: 4D 履歴
初出: 4D v14 R4 ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||