如何反转一个数组

11

你好,我有一个字符串数组,需要按照从后往前的顺序输出它们。

我没有找到 arrayReverse() 函数,但是我只是在学习 ColdFusion。


2
CFLib来拯救了!已经有人编写了一个 arrayReverse 函数:http://www.cflib.org/udf/ArrayReverse - ale
5个回答

16

您只需要逆序遍历数组即可。

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

如果你只是输出值,像这样通过数组向后循环就是需要的。 - Mike Causer
4
如果您的主机上安装了Java,那么Java方法非常快捷简便: <cfscript> a = [1, 2, 3, 4, 5]; createObject("java", "java.util.Collections").reverse(a); writeDump(a); </cfscript> 该代码将反转数组a中元素的顺序,并输出结果。 - Paul

2

提供信息,CF 中的数组就是一个ArrayList,因此...

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

由于在 CF 中数组是按值传递的(直到 CF2016 的 this.passArraybyReference),所以我不会费心编写 arrayReverse(),因为它非常低效。


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

1
我知道他说了arraySort,但他问的是如何反转数组而不是排序。如果原始数组已经排序,那么这是一个好的解决方案,否则它将无法工作。 - Dale Fraser
1
尽管这个人不需要它,java.util.Collections用于反转非常有效。 - Leigh

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

这个可以解决问题。


1
适用于小数组 - 但对于大数组来说代价高昂。 - Mike Causer
3
如果数组中的数据很简单,那么这是一个不错的想法。但如果是一组对象、结构或数组,就不能起作用。 - Dale Fraser
请使用单词而不是单个字符来尝试您的示例。它确实会反转。 - Leo
如果 test = ['hello', 'cat'],那么你会得到 ['tac', 'olleh'] - Joseph Dykstra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接