Привет У меня есть массив строк, и мне нужно вывести их из последнего в первый.Как отменить массив
Я не вижу arrayReverse()
функцию, но я только обучение ColdFusion
Привет У меня есть массив строк, и мне нужно вывести их из последнего в первый.Как отменить массив
Я не вижу arrayReverse()
функцию, но я только обучение ColdFusion
Вы можете просто цикл по массиву в обратном
<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>
Если все, что вы делаете, выводит значения, перебирает назад через массив, как это вам нужно –
Метод java быстро и легко также, если у вас есть доступ к java на вашем хосте:
О, но существует метод 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
Я знаю, что он говорит arraySort, но он спрашивает, как изменить массив, а не сортировать его. Хорошее решение, если исходный массив отсортирован, иначе он не будет работать. –
Хотя этот парень ему не нужен, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) хорошо работает для реверса – Leigh
<cfscript>
test = [ "a", "b", "c", "d" ];
writeDump(listToArray(reverse(arrayToList(test))));
</cfscript>
Будет делать трюк.
Отлично подходит для небольших массивов - но дорого для больших –
Приятная идея, если данные в массиве просты. Не работает, если это массив объектов или структур или массивов. –
Да, это будет работать только для простых типов. – Paul
Я написал эту функцию для изменения массива. Он изменяет массив и возвращает его.
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']
Я положил его в собственный компонент, так что легче использовать в различных проекты.
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
), так что это очень неэффективно.
CFLib на помощь! Кто-то уже написал функцию «arrayReverse»: http://www.cflib.org/udf/ArrayReverse – ale