2012-01-19 20 views
6

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

+2

CFLib al rescate! Alguien ya ha escrito una función 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale

Respuesta

12

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> 
+0

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 –

+3

El método Java es Rápido y fácil también si tiene acceso a Java en su host: a = [1, 2, 3, 4, 5]; createObject ("java", "java.util.Collections"). Reverse (a); writeDump (a); Paul

1

¡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

+1

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á. –

+1

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

0
<cfscript> 
    test = [ "a", "b", "c", "d" ]; 
    writeDump(listToArray(reverse(arrayToList(test)))); 
</cfscript> 

Hará el truco.

+1

Fino para matrices pequeñas, pero costoso para grandes –

+3

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. –

+0

Sí, esto solo funcionará para tipos simples. – Paul

1

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.

1

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.

Cuestiones relacionadas