4 façons différentes de trouver des éléments dans une collection

Traduit automatiquement de Deepl

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

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

Fabrice Mainguené
- Product Owner -Fabrice Mainguené a rejoint l'équipe du programme 4D en novembre 2016. En tant que Product Owner, il est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Après avoir obtenu une licence en informatique au CNAM, Fabrice a rejoint une petite société d'édition de logiciels en tant que développeur Windev. Il a ensuite travaillé pour différentes entreprises dans les domaines de l'industrie et du commerce en tant que développeur Windev et web ainsi que conseiller technique sur les nouvelles fonctionnalités.