En tant que développeur, vous avez souvent besoin de savoir si un élément spécifique existe déjà dans une collection, ou de trouver tous les éléments correspondant à des critères particuliers. Les méthodes de collection 4D offrent de nombreux moyens différents de rechercher des éléments spécifiques.
Cet article fait partie d’une série démontrant comment manipuler les collections avec les méthodes ajoutées dans 4D v16 R6. Pour en savoir encore plus, téléchargez notre démo de base de données, qui comprend 12 exemples différents pour montrer tout ce que vous pouvez faire avec les méthodes de collection !
Exemple de base de données : Gérer des collections
Comment trouver des éléments dans une collection ?
Voyons maintenant les différentes façons dont 4D permet de trouver des éléments dans une collection. Tout d’abord, nous commençons par construire une collection comme suit :
$col:=New collection(New object("Ville" ; "Paris" ; "Météo";1))
$col .push(New object("City" ; "New-York" ; "Weather";-10))
$col .push(New object("City" ; "Tokyo" ; "Weather";-5))
$col .push(New object("City" ; "Miami" ; "Weather";15))
Utilisez les méthodes « some » ou « every
Pour déterminer si au moins une valeur de votre collection est supérieure à 0, vous pouvez utiliser la méthode some méthode :
$b:=$col.some("WeatherGreaterThan0") // true
où WeatherGreaterThan0 est une méthode de projet, utilisée comme un rappel, comme suit :
$1.result:=$1.value.Weather>0
Maintenant, si vous voulez savoir si tous les éléments de votre collection correspondent à un test personnalisé, utilisez simplement every:
$b:=$col.every("WeatherGreaterThan0") // false
Notez que la même méthode de rappel pourrait également être utilisée pour de nombreux autres cas, comme une sorte de méthode générique.
Filtrer une collection
Vous pouvez filtrer une collection en fonction des résultats d’une méthode de rappel avec la méthode filter méthode.
De la même manière que dans les exemples ci-dessus, si vous voulez créer une collection avec toutes les valeurs supérieures à 0 à partir d’une autre collection :
$colNew:=$col.filter("WeatherGreaterThan0")
// [{City:Paris,Weather:1},{City:Miami,Weather:15}]
trouver le premier élément correspondant à un critère
Si vous recherchez le premier élément d’une collection qui correspond à une méthode de projet spécifiée, utilisez simplement find comme méthode de rappel :
$o:=$col.find("WeatherGreaterThan0") // {City:Paris,Weather:1}
De la même manière, si vous recherchez l’index et non l’élément lui-même, utilisez findIndex:
$index:=$
col .findIndex("WeatherGreaterThan0")
// $i=0 (premier indice de la collection)
Obtenir l’index d’un élément recherché
Enfin, vous pouvez utiliser les méthodes indexOf et lastIndexOf pour rechercher une expression parmi les éléments de la collection et renvoyer l’index de la première/dernière occurrence trouvée :
$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