2012-01-19 7 views
6

私は文字列の配列を持っており、最後のものから最初のものに出力する必要があります。配列を逆にするには

私はarrayReverse()機能が表示されていないが、私は唯一のちょうど逆

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

の配列を超えることができますちょうどループのColdFusion

+2

CFLibを救助する!既に誰かが 'arrayReverse'関数を書いています:http://www.cflib.org/udf/ArrayReverse – ale

答えて

12

を学んでいる私はあなたに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")。逆(a); writeDump(a); Paul

1

ああ、ArraySortメソッドがあります。

ArraySort(array, sort_type [, sort_order]);

ブール値を返します。

arrayは、参照として更新されます。

sort_typenumerictextまたはtextnocase

sort_orderascまたは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

この機能を使用して配列を逆転させました。配列を変更して返します。

私はそれ自身のコンポーネントにそれを置くので、それは別のに使用する方が簡単です

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

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

を、私はそれをテストしてみた、そしてそれは文字列の配列と同様に、オブジェクト上で動作

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

プロジェクト。

1

はFYI CFの配列は、ちょうどArrayListあるので...

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

をそして私は、配列が(ないCF2016のthis.passArraybyReferenceまで)CFの値によって渡されるためarrayReverse()を書く気にしないだろうので、それは超非効率的です。

関連する問題