2012-01-19 24 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]);

返回boolean值。

array通过参考更新。

sort_type可以numerictexttextnocase

sort_order可以ascdesc

<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阵列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()所以它是超级低效。