Comment puis-je supprimer les valeurs en double d'un tableau Coldfusion?
J'ai une fonction qui reçoit une chaîne de balises. Afin de sauver les balises individuellement, la fonction transforme la chaîne en un tableau:
this.tags = listToArray(this.tags, ", ");
Comment puis-je supprimer les valeurs en double dans le cas où il y a tout?
source d'informationauteur Mohamad
Vous devez vous connecter pour publier un commentaire.
Un moyen facile de supprimer les doublons d'une liste est de convertir la liste à une structure (struct) d'abord, puis conver la structure d'un tableau. Toutefois, si l'ordre des éléments dans la liste est importante, cela peut ne pas être approprié que les éléments de la struct sera triée.
Si l'ordre des éléments est important que vous auriez besoin pour construire le tableau manuellement plutôt que d'utiliser le listToArray fonctionnalité.
J'aime utiliser Java pour ce genre de tâche:
Seul problème est qu'il prend en compte casse, donc, pense que "les pommes" & "POMMES" sont des choses différentes (qui, techniquement, oui, en fonction de votre système peut être différent). Chemin de ronde, qui est à la baisse tout cas dans la liste de la première.
Depuis que vous êtes vraiment en commençant par une chaîne de caractères/de la liste que vous soyez de le convertir ensuite à un tableau, vous pouvez passer la chaîne à travers ListRemoveDuplicates avant la conversion de la à un tableau. ListRemoveDuplicates a été introduit dans Coldfusion 10; les paramètres d'entrée sont (liste, delimiter=",", ignoreCase=FALSE).
Si vous étiez en train de commencer avec un tableau, vous devez le convertir en une liste en premier, puis de nouveau après.
basé sur l'idée de Jason Haritou, mais vous pouvez le faire en pure CF l'aide Struct! (les clés de correspondance sont insensibles à la casse)
Cependant, pour les petites listes, je préfère Antoine solution.
J'ai juste eu de la dup une liste très importante (5k+entrées) et a trouvé un moyen beaucoup plus rapide que d'utiliser une boucle. Je ressens le besoin de partager.
<cfset thisArray = ListToArray(thisList)>
<cfset thisQuery = QueryNew("")>
<cfset temp = QueryAddColumn(thisQuery,"items","varChar",thisArray)>
<cfquery name="qItems" dbtype="query">SELECT DISTINCT items FROM thisQuery</cfquery>
<cfset returnString = ValueList(qItems.items)>
J'ai écrit cela dans une fonction pour une utilisation facile:
Je bench-il a marqué contre quelques autres méthodes et voici les résultats en millisecondes:
Boucler sur la Liste de vérification pour l' > 1 exemple: 6265
À l'aide de Henry struct méthode: 2969
La méthode ci-dessus: 31
Jason Méthode: 30
Viens de mettre le tableau dans une structure (Struct), puis de la copier à un tableau 😉
http://www.bennadel.com/blog/432-Using-ColdFusion-Structures-To-Remove-Duplicate-List-Values.htm
Dans Coldfusion 10 ou Railo 4, vous pouvez utiliser Le trait de soulignement.cfc uniq() la fonction:
Un avantage de
uniq()
est qu'il vous permet de passer d'une fonction de transformation, si nécessaire.Note: j'ai écrit le trait de Soulignement.cfc
La prise de jason réponse juste, un peu plus loin, voici un
arrayDistinct
fonction.Vous pouvez le tester ici: https://trycf.com/gist/62ff904d4500519e3144fc9564d2bce7/acf
Il ya un couple de UDF sur CFLib que cela, ArrayyDiff (http://www.cflib.org/udf/arrayDiff) et ArrayCompare (http://www.cflib.org/udf/arrayCompare).
hth,
larry