Salut J'ai un tableau de chaînes, et j'ai besoin de les sortir du dernier au premier.Comment inverser un tableau
Je ne vois pas une fonction arrayReverse()
, mais je suis juste apprendre ColdFusion
Salut J'ai un tableau de chaînes, et j'ai besoin de les sortir du dernier au premier.Comment inverser un tableau
Je ne vois pas une fonction arrayReverse()
, mais je suis juste apprendre ColdFusion
Vous pouvez juste boucle sur le tableau dans le sens inverse
<cfloop index="i" from="#arrayLen(myArray)#" to="1" step="-1">
<cfoutput>#myArray[i]#</cfoutput>
</cfloop>
Je pense que vous avez besoin d'utiliser des méthodes Java pour vraiment inverser le tableau.
<cfscript>
// and for those who use cfscript:
for (var i = arrayLen(myArray); i >= 1; i--) {
writeOutput(myArray[i]);
}
</cfscript>
Si tout ce que vous faites est de sortir les valeurs, boucler en arrière dans le tableau comme ceci est ce dont vous avez besoin –
La méthode java est rapide et facile également si vous avez accès à Java sur votre hôte:
Oh mais il existe une méthode ArraySort!
ArraySort(array, sort_type [, sort_order]);
retourne un booléen.
array
est mis à jour par référence.
sort_type
peut être numeric
, text
ou textnocase
sort_order
peut être asc
ou desc
<cfscript>
test = [ "c", "d", "a", "b" ];
arraySort(test, 'textnocase');
test is now:
[ "a", "b", "c", "d" ]
</cfscript>
Vérifiez la documentation ici:
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arraysort.html
Je sais qu'il dit arraySort, mais il demande comment inverser le tableau et ne pas le trier. Bonne solution, si le tableau original est trié, sinon cela ne fonctionnera pas. –
Bien que ce type n'en ait pas besoin, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) fonctionne bien pour l'inversion – Leigh
<cfscript>
test = [ "a", "b", "c", "d" ];
writeDump(listToArray(reverse(arrayToList(test))));
</cfscript>
Fera l'affaire.
Fine pour les petites baies - mais chère pour les grandes –
Bonne idée si les données dans le tableau sont simples. Ne fonctionnerait pas si c'est un tableau d'objets ou de structures ou de tableaux. –
Oui, cela ne fonctionnera que pour les types simples. – Paul
J'ai écrit cette fonction pour inverser un tableau. Il modifie le tableau et le renvoie.
function init(required array arr) {
var arrLen = arrayLen(arr);
for (var i = 1; i <= (arrLen/2); i++) {
var swap = arr[arrLen + 1 - i];
arr[arrLen + 1 - i] = arr[i];
arr[i] = swap;
}
return arr;
}
Je l'ai testé et il fonctionne sur les tableaux de chaînes, ainsi que des objets, etc.
writeOutput(arrayReverse(['a','b','c'])); // => ['c', 'b', 'a']
var a = ['apple', 'ball', 'cat', 'dog'];
arrayReverse(a);
writeOutput(a); // => ['dog', 'cat', 'ball', 'apple']
je l'ai mis dans son propre composant, il est donc plus facile à utiliser dans différents projets.
FYI tableau dans CF est juste un ArrayList, alors ...
arr = [1,2,3];
createObject("java", "java.util.Collections").reverse(arr);
writeDump(arr); // arr becomes [3,2,1]
Et je ne voudrais pas la peine d'écrire arrayReverse()
parce tableau est passé par valeur CF (pas avant CF2016 de this.passArraybyReference
) donc il est super inefficace.
CFLib à la rescousse! Quelqu'un a déjà écrit une fonction 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale