Combiner et trier des collections

Traduit automatiquement de Deepl

4D v16 R6 opens a wide range of possibilities to manage collections. MPour fusionner deux collectionsen une seule, cloner ou simplement ordonner une collection, il suffit d’appeler une méthode. Cela permet de gagner un temps précieux, par exemple lorsque vous devez concaténer deux collections, ne conserver que les valeurs distinctes ou les trier.

Cet article fait partie d’une série démontrant comment manipuler les collections à l’aide des méthodes ajoutées dans 4D v16 R6. Pour en savoir encore plus, téléchargez notre exemple de base de données, qui comprend 12 exemples différents pour montrer ce que vous pouvez faire avec les méthodes de collection !

Exemple de base de données : Gérer les collections

Copie d’une collection

Copie profonde

La méthode copy renvoie une copie profonde de l’instance de la collection. Une copie profonde signifie que tous les éléments de la collection originale sont dupliqués et ne partagent aucune référence avec la collection retournée.

Dans l’exemple ci-dessous, l’exécution d’une copie profonde à l’aide de la méthode copy ajoute un nouvel élément à $col2 (a copy of the first collection – $col). An élément supplémentaire est ajouté à $col2, however $col remains unchanged:

//créer une collection
$col
:=Newcollection("a" ; "b" ; "c" ; "d" ; "e")
/faire une copie profonde de la première collection
$col2:=$col.copy($col)
//ajoute un nouvel élément à la copie de la première collection
$col2.push("f")
// $col=["a", "b", "c", "d, "e"]

// $col2=["a", "b", "c", "d, "e", "f"]

Copie superficielle

Lorsque vous effectuez une copie superficielle d’une collection, les éléments de la collection d’origine partagent leurs références avec la collection retournée. Par exemple, si vous créez une collection, que vous en faites une copie superficielle typique, puis que vous ajoutez un nouvel élément à la copie ($col2)la collection d’origine ($col) reflétera également la modification car $col et $col2 partagent leur référence :

//créer une collection
$col
:=Newcollection("a" ; "b" ; "c" ; "d" ; "e")
/faire une copie superficielle de la première collection
$col2:=$col

//ajouter un nouvel élément à la copie de la première collection

$col2.push("f")
// $col2=$col=["a", "b", "c", "d, "e", "f"]

Vous pouvez créer une copie superficielle d’une partie d’une collection en utilisant la méthode slice méthode :

//create a collection
$col
:=New collection("a" ; "b" ; "c" ; "d" ; "e")
// Copy from index 2 and stop at end of collection -1

$col2:=$col.slice(2;-1)
//$col2=[c,d]

Combinaison de collections

La concaténation de deux collections peut être effectuée à l’aide de la méthode concat ou combine pour concaténer deux collections.

La méthode concat renvoie une nouvelle collection contenant la concaténation des deux collections :

//create 2 collections
$col
:=Newcollection("a" ; "b" ; "c")
$col2:=Newcollection(1;2;3)
//combine les 2 collections en une 3ème collection
$col3:=$col.concat($col2)
//$col3=["a", "b", "c",1,2,3]

La méthode combine ajoute chaque élément d’une collection (passée en paramètre) à la fin de la collection originale :

//create 2 collections
$col
:=Nouvellecollection("a" ; "b" ; "c")
$col2:=Nouvellecollection(1;2;3)
//ajoute la 2ème collection à la fin de la première
$col.combine($col2)
//$col=["a", "b", "c",1,2,3]

La méthode distinct crée une nouvelle collection contenant uniquement des valeurs distinctes (différentes) de la collection d’origine :

$col:=New collection("a" ; "b" ; "c" ; "a" ; "b" ; "c" ; "d" ; "e")
$col2 :=$col.distinct()
//$col2=[a,b,c,d,e]

Tri d’une collection

Pour trier une collection, vous pouvez utiliser les méthodes sort ou orderBy pour trier une collection. La méthode sort modifie la collection d’origine, tandis que la méthode orderBy renvoie une collection entièrement nouvelle (copie superficielle) et triée, mais ne modifie pas la collection d’origine :

$col:=Newcollection( "a" ; "b" ; "c" ; "a" ; "b" ; "c" ; "d" ; "e")
$col2:=$col.orderBy()
//$col2=["a", "a", "b", "b", "c", "c", "d", "e"]

//$col=["a", "b", "c", "a", "b", "c", "d", "e"]

$col.sort()
//$col=["a", "a", "b", "b", "c", "c", "d", "e"]

Vous pouvez également trier une collection en utilisant sort ou orderByMethodqui nécessite une méthode de rappel :

$col:=Newcollection("Orange" ; "Apple" ; "Grape" ; "Pear" ; "Banana" ; "Fig" ; "Blackberry" ; "Passion fruit")
$col2:=$col.orderByMethod( "WordLength")
//$col2=[Fruit de la passion,Mûre,Orange,Banane,Pomme,Raisin,Poire,Fig]
$col.sort("WordLength")
//$col=[Fruit de la passion,Mûre,Orange,Banane,Pomme,Raisin,Poire,Fig]

Où la méthode de rappel WordLength est l’une des méthodes de votre projet :

$1.result:=Length(String($1.value))>Length(String($1.value2))

Enfin, vous pouvez faire une copie profonde d’une collection avec tous ses éléments dans l’ordre inverse en utilisant la méthode reverse:

$col:=Nouvellecollection(1;3;5;2;4;6)
$col2:=$col.reverse()
//$c2=[6,4,2,5,3,1]

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.