La récupération de la liste des éléments de données uniques est toujours utile lors de la manipulation des données. Dans certains cas, le nombre d’occurrences de chaque valeur est essentiel. La fonction distinct des classes de sélection Collection et Entity permet de récupérer une liste de valeurs uniques. Avec 4D v20, vous pouvez également récupérer le nombre d’occurrences de chaque valeur distincte.
Et ce n’est pas tout !
Un objet de la base de données peut être utilisé pour sauvegarder les données personnalisées saisies par l’utilisateur. Du côté du code, vous devez donc connaître tous les chemins possibles vers l’objet. La fonction distinctPaths a été ajoutée à la classe de sélection des entités.
Voici tout ce que vous devez savoir.
Nouvelle option pour distinct
La syntaxe est identique pour les deux classes, Collection et Entity selection. Vous devez passer la constante ck count values, ou dk count values au second paramètre nommé option pour obtenir une collection de paires d’attributs : value et count.
Si vous ne passez pas l’option, le comportement reste le même ; vous obtenez une collection de valeurs uniques.
Exemple avec Collection
Par exemple, je souhaite obtenir la liste des valeurs uniques d’une collection de catégories et le nombre d’occurrences de chaque catégorie :
var $col; $category: Collection
$category :=New Collection("Famille" ; "Ami" ; "Travail" ; "Famille" ; "Personnel")
$col :=$category.distinct (ck count values)
Le résultat est le suivant :
[ {"value":"Family","count":2}, {"value":"Friend","count":1}, {"value":"Personal","count":1}, {"value":"Work","count":1} ]
Exemple de sélection d’entités
Par exemple, je souhaite obtenir la liste des pays de mes contacts et le nombre de contacts par pays :
var $countries : Collection
)
$countries :=ds.Contact.all().distinct("country" ;dk count values
Le résultat est le suivant :
[ {"value":"France","count":2}, {"value":"Morocco","count":10}, {"value":"Germany","count":3} ]
Nouvelle fonction « chemins distincts
La fonction distinctPaths de la classe de sélection d’entités renvoie la liste des chemins distincts trouvés dans votre champ d’objet indexé. Vous devez passer le nom du champ d’objet indexé en paramètre. Cette fonction est équivalente à la commande DISTINCT ATTRIBUTE PATHS.
Exemple
Par exemple, je veux récupérer tous les chemins possibles du champ d’objet « address » :
var $paths : Collection
$paths :=ds.Contact.all().distinctPaths("address")
Le résultat est le suivant :
[ "Number", "StreetAddress", "ExtendedAddress", "Ville", "ZipCode", "Pays" ]
Suivant…
N’hésitez pas à nous faire part de vos commentaires et de vos idées sur le forum 4D afin de nous aider à améliorer le produit.