開発者としては、指定した項目がすでにコレクションに存在するかどうかを知る必要があったり、特定の条件に対応するすべての項目を検索する必要があったりすることがよくあります。4Dコレクションメソッドは、特定の項目を検索するための多くの異なる方法を提供します。
この記事は、4D v16 R6 で追加されたメソッドを使用して、コレクションを操作する方法を紹介するシリーズの一部です。さらに詳しく知りたい方は、データベースデモをダウンロードしてください。このデモには、コレクションメソッドでできる12の異なる例が含まれています。
コレクション内の項目を見つけるには?
さて、4D が提供するコレクション内のアイテムを見つけるためのさまざまな方法を見てみましょう。まず、次のようにコレクションを構築することから始めます。
$col:=New collection(New object("City"; "Paris"; "Weather";1))
$col .push(New object("City"; "New-York"; "Weather";-10))
$col .push(New object("都市"; "東京"; "天気";-5))
、
$col.
push(New object("都市"; "マイアミ"; "天気";15
))
some “または “every “メソッドを使用する
コレクション内の少なくとも1つの値が0より大きいかどうかを判断するには someメソッドを使用します。
b:=$col.some("WeatherGreaterThan0")// true
ここで、WeatherGreaterThan0は プロジェクトメソッドであり、以下のようにコールバックとして使用されます。
$1.result:=$1.value.Weather>0
コレクション内のすべての要素がカスタムテストと一致するかどうかを知りたい場合は、次のようにします。 every:
$b:=$col.every("WeatherGreaterThan0")// false
同じコールバックメソッドは、汎用的なメソッドとして、他の多くのケースにも使用できることに注意してください。
コレクションをフィルタリングする
コールバックメソッドの結果に応じてコレクションをフィルタリングするには filterメソッドを使用します。
上の例と同じように、別のコレクションから 0 より大きな値をすべて集めたコレクションを作成する場合。
filter("WeatherGreaterThan0")
ります。
// [{City:Paris,Weather:1},{City:Miami,Weather:15}]のようにな
条件に一致する最初の要素を見つける
指定したプロジェクトメソッドと一致するコレクション内の最初の要素を検索する場合は、次のように使用するだけです。 findをコールバックメソッドとして使用します。
$o:=$col.find("WeatherGreaterThan0")// {都市:パリ,天気:1}を検索する。
同じように、要素そのものではなくインデックスを検索する場合、次のように使用します。 findIndex:
$index:=$
col .findIndex("WeatherGreaterThan0")
// $i=0 (コレクション内の最初のインデックス)
検索した要素のインデックスを取得する
最後に indexOfと lastIndexOfメソッドを使って、コレクション要素から式を検索し、見つかった最初と最後の出現のインデックスを返すことができます。
$col2:=New collection(1;2; "Henry"; "Albert"; "Henry";6;4; "Henry";5)
$i :=$col2.indexOf("Henry") //$i=2 index of the first occurrence
$i :=$col2.lastIndexOf("Henry") //$i=7 index of the last occurrence