Hola Tengo una matriz de cadenas, y tengo que mostrarlas desde la última a la primera.Cómo revertir una matriz
no veo una función arrayReverse()
, pero sólo estoy aprendiendo ColdFusion
Hola Tengo una matriz de cadenas, y tengo que mostrarlas desde la última a la primera.Cómo revertir una matriz
no veo una función arrayReverse()
, pero sólo estoy aprendiendo ColdFusion
Usted puede simplemente bucle sobre la matriz a la inversa
<cfloop index="i" from="#arrayLen(myArray)#" to="1" step="-1">
<cfoutput>#myArray[i]#</cfoutput>
</cfloop>
Creo que es necesario utilizar métodos de Java a realmente revertir la matriz.
<cfscript>
// and for those who use cfscript:
for (var i = arrayLen(myArray); i >= 1; i--) {
writeOutput(myArray[i]);
}
</cfscript>
Si todo lo que hace es dar salida a los valores, haciendo un ciclo hacia atrás a través de la matriz como este es lo que necesita –
El método Java es Rápido y fácil también si tiene acceso a Java en su host:
¡Oh, pero hay un método ArraySort!
ArraySort(array, sort_type [, sort_order]);
Boolean.
array
se actualiza por referencia.
sort_type
se puede numeric
, text
o textnocase
sort_order
puede haber asc
o desc
<cfscript>
test = [ "c", "d", "a", "b" ];
arraySort(test, 'textnocase');
test is now:
[ "a", "b", "c", "d" ]
</cfscript>
Mira la documentación aquí:
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arraysort.html
Sé que dice arraySort, pero pregunta cómo invertir la matriz y no ordenarla. Buena solución, si la matriz original está ordenada de otra forma, no funcionará. –
Aunque este chico no lo necesita, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) funciona bien para invertir – Leigh
<cfscript>
test = [ "a", "b", "c", "d" ];
writeDump(listToArray(reverse(arrayToList(test))));
</cfscript>
Hará el truco.
Fino para matrices pequeñas, pero costoso para grandes –
Es una buena idea si los datos dentro de la matriz son simples. No funcionaría si es una matriz de objetos o estructuras o matrices. –
Sí, esto solo funcionará para tipos simples. – Paul
Escribí esta función para invertir una matriz. Modifica la matriz y la devuelve.
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;
}
Lo he probado, y funciona en matrices de cadenas, así como los objetos, etc.
writeOutput(arrayReverse(['a','b','c'])); // => ['c', 'b', 'a']
var a = ['apple', 'ball', 'cat', 'dog'];
arrayReverse(a);
writeOutput(a); // => ['dog', 'cat', 'ball', 'apple']
lo puse en su propio componente, por lo que es fácil de usar en diferentes proyectos.
FYI matriz en la FQ es sólo un ArrayList, así que ...
arr = [1,2,3];
createObject("java", "java.util.Collections").reverse(arr);
writeDump(arr); // arr becomes [3,2,1]
Y no me molestaría en escribir arrayReverse()
porque matriz se pasa por valor de CF (no hasta CF2016 de this.passArraybyReference
) así que es muy ineficiente.
CFLib al rescate! Alguien ya ha escrito una función 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale