Supprimer dans une collection

Peut-on utiliser collection.remove dans un “Pour chaque” ?
Ou faut-il faire “à la classique” avec une boucle inversée ?

Ce sujet n’a pas suscité d’intérêt ; je relance.
Comment peut-on supprimer des éléments d’une collection correspondant à des critères ?
J’ai tenté le .query().remove() sans succès, car la collection résultant du query est une copie.
Il y a la solution proposée par Arnaud mais ce n’est pas terrible.
J’ai résolu mon problème en inversant le query :
Dans cet exemple, je souhaite enlever les Dupon…
C_COLLECTION($coll_c;$coll2_c)
$coll2_c:=New collection
$coll_c:=New collection(
New object(“name”;“Dupont”);
New object(“name”;“Durant”);
New object(“name”;“Dupond”);
New object(“name”;“Martin”))
Au lieu de faire (ça fonctionne)
$coll2_c:=$coll_c.query(“name # :1”;“Dupo@”)
J’aurais aimé faire
$coll2_c:=$coll_c.query(“name = :1”;“Dupo@”).remove()
ou
$coll2_c:=$coll_c.remove($coll_c.query(“name = :1”;“Dupo@”))
Mais ce n’est pas comme ça que fonctionne remove() ; une autre idée ?

Vous pouvez faire comme ceci :

		$c:=New collection(\
		New object("name";"Dupont");\
		New object("name";"Durant");\
		New object("name";"Dupond");\
		New object("name";"Martin"))
		
		For each ($i;$c.indices("name = Dupon@").reverse())
			
			$c.remove($i)
			
		End for each 
3 Likes

@de_MONTARD.Arnaud T’as intérêt à ne pas avoir de doublons et que l’ordre ne t’importe pas… :roll_eyes:

Tu confirmes qu’il n’y a pas de solution simple ; dans 4D Classic, on aurait pu utiliser des intersections d’ensembles.