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
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
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>
Se tutto ciò che stai facendo è l'output dei valori, il looping all'indietro attraverso l'array come questo è quello che ti serve –
Il metodo java è facile e veloce anche se hai accesso a java sul tuo host:
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
So che dice arraySort, ma chiede come invertire l'array e non ordinarlo. Buona soluzione, se l'array originale è ordinato altrimenti non funzionerà. –
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
<cfscript>
test = [ "a", "b", "c", "d" ];
writeDump(listToArray(reverse(arrayToList(test))));
</cfscript>
Farà il trucco.
Fine per piccoli array - ma costoso per quelli grandi –
Bella idea se i dati all'interno dell'array sono semplici. Non funzionerebbe se fosse una matrice di oggetti o strutture o matrici. –
Sì, funzionerà solo con tipi semplici. – Paul
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.
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.
CFLib per il salvataggio! Qualcuno ha già scritto una funzione 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale