2012-01-19 15 views
6

Ciao Ho una matrice di stringhe e devo inviarli dall'ultimo al primo.Come si inverte un array

non vedo una funzione arrayReverse(), ma sto imparando solo ora ColdFusion

+2

CFLib per il salvataggio! Qualcuno ha già scritto una funzione 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale

risposta

12

Si può solo ciclo sopra la matrice in senso inverso

<cfloop index="i" from="#arrayLen(myArray)#" to="1" step="-1"> 
    <cfoutput>#myArray[i]#</cfoutput> 
</cfloop> 

Credo che è necessario utilizzare metodi Java per davvero invertire la matrice.

<cfscript> 
// and for those who use cfscript: 
for (var i = arrayLen(myArray); i >= 1; i--) { 
    writeOutput(myArray[i]); 
} 
</cfscript> 
+0

Se tutto ciò che stai facendo è l'output dei valori, il looping all'indietro attraverso l'array come questo è quello che ti serve –

+3

Il metodo java è facile e veloce anche se hai accesso a java sul tuo host: a = [1, 2, 3, 4, 5]; createObject ("java", "java.util.Collections"). Reverse (a); writeDump (a); Paul

1

Oh, ma esiste un metodo ArraySort!

ArraySort(array, sort_type [, sort_order]);

Returns booleano.

array aggiornato per riferimento.

sort_type può essere numeric, text o textnocase

sort_order può essere asc o desc

<cfscript> 
test = [ "c", "d", "a", "b" ]; 
arraySort(test, 'textnocase'); 

test is now: 
[ "a", "b", "c", "d" ] 

</cfscript> 

Controllare la documentazione qui:

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arraysort.html

+1

So che dice arraySort, ma chiede come invertire l'array e non ordinarlo. Buona soluzione, se l'array originale è ordinato altrimenti non funzionerà. –

+1

Anche se questo ragazzo non ne ha bisogno, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) funziona bene per l'inversione – Leigh

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

Farà il trucco.

+1

Fine per piccoli array - ma costoso per quelli grandi –

+3

Bella idea se i dati all'interno dell'array sono semplici. Non funzionerebbe se fosse una matrice di oggetti o strutture o matrici. –

+0

Sì, funzionerà solo con tipi semplici. – Paul

1

Ho scritto questa funzione per invertire una matrice. Modifica l'array e lo restituisce.

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; 
} 

ho provato, e funziona su array di stringhe, così come gli oggetti, ecc

writeOutput(arrayReverse(['a','b','c'])); // => ['c', 'b', 'a'] 

var a = ['apple', 'ball', 'cat', 'dog']; 
arrayReverse(a); 
writeOutput(a); // => ['dog', 'cat', 'ball', 'apple'] 

ho messo in essa la propria componente, quindi è più facile da usare in diversi progetti.

1

FYI matrice in CF è solo un ArrayList, quindi ...

arr = [1,2,3]; 
createObject("java", "java.util.Collections").reverse(arr); 
writeDump(arr); // arr becomes [3,2,1] 

E non vorrei perdere tempo a scrivere arrayReverse() perché array viene passato per valore in CF (non fino CF2016 di this.passArraybyReference) quindi è super-inefficiente.

Problemi correlati