2012-01-19 2 views
6

Привет У меня есть массив строк, и мне нужно вывести их из последнего в первый.Как отменить массив

Я не вижу arrayReverse() функцию, но я только обучение ColdFusion

+2

CFLib на помощь! Кто-то уже написал функцию «arrayReverse»: http://www.cflib.org/udf/ArrayReverse – ale

ответ

12

Вы можете просто цикл по массиву в обратном

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

Я думаю, вам нужно использовать Java-методы для действительно переверните массив.

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

Если все, что вы делаете, выводит значения, перебирает назад через массив, как это вам нужно –

+3

Метод java быстро и легко также, если у вас есть доступ к java на вашем хосте: a = [1, 2, 3, 4, 5]; createObject ("java", "java.util.Collections"). Reverse (a); writeDump (a); Paul

1

О, но существует метод ArraySort!

ArraySort(array, sort_type [, sort_order]);

Возвращает логическое значение.

array обновляется по ссылке.

sort_type может быть numeric, text или textnocase

sort_order может быть asc или desc

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

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

</cfscript> 

Заканчивать документацию здесь:

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

+1

Я знаю, что он говорит arraySort, но он спрашивает, как изменить массив, а не сортировать его. Хорошее решение, если исходный массив отсортирован, иначе он не будет работать. –

+1

Хотя этот парень ему не нужен, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) хорошо работает для реверса – Leigh

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

Будет делать трюк.

+1

Отлично подходит для небольших массивов - но дорого для больших –

+3

Приятная идея, если данные в массиве просты. Не работает, если это массив объектов или структур или массивов. –

+0

Да, это будет работать только для простых типов. – Paul

1

Я написал эту функцию для изменения массива. Он изменяет массив и возвращает его.

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

Я проверил его, и он работает с массивами строк, а также объектов и т.д.

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

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

Я положил его в собственный компонент, так что легче использовать в различных проекты.

1

FYI массив в МВ просто ArrayList, так что ...

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

И я бы не стал писать arrayReverse(), потому что массив не передается по значению в CF (не до CF2016-х this.passArraybyReference), так что это очень неэффективно.

Смежные вопросы