コレクション内のアイテムを探す4種類の方法

Deeplからの自動翻訳

開発者としては、指定した項目がすでにコレクションに存在するかどうかを知る必要があったり、特定の条件に対応するすべての項目を検索する必要があったりすることがよくあります。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 (コレクション内の最初のインデックス)

検索した要素のインデックスを取得する

最後に indexOflastIndexOfメソッドを使って、コレクション要素から式を検索し、見つかった最初と最後の出現のインデックスを返すことができます。

$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

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。