2012-01-19 38 views
6

Xin chào Tôi có một chuỗi các chuỗi và tôi cần xuất chúng từ chuỗi cuối cùng đến chuỗi đầu tiên.Làm cách nào để đảo ngược một mảng

Tôi không thấy một chức năng arrayReverse(), nhưng tôi chỉ mới học ColdFusion

+2

CFLib để giải cứu! Ai đó đã viết một hàm 'arrayReverse': http://www.cflib.org/udf/ArrayReverse – ale

Trả lời

12

Bạn có thể chỉ là vòng lặp qua mảng ngược

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

Tôi nghĩ rằng bạn cần phải sử dụng các phương pháp Java để thực sự đảo ngược mảng.

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

Nếu tất cả những gì bạn đang làm là xuất ra các giá trị, lặp ngược lại qua mảng như thế này là những gì bạn cần –

+3

Phương thức java là cũng nhanh chóng và dễ dàng nếu bạn có quyền truy cập vào java trên máy chủ của mình: a = [1, 2, 3, 4, 5]; createObject ("java", "java.util.Collections"). Đảo ngược (a); writeDump (a); Paul

1

Oh nhưng có một phương pháp ArraySort!

ArraySort(array, sort_type [, sort_order]);

Trả về boolean.

array được cập nhật theo tham chiếu.

sort_type có thể numeric, text hoặc textnocase

sort_order có thể asc hoặc desc

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

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

</cfscript> 

Kiểm tra các tài liệu hướng dẫn ở đây:

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

+1

Tôi biết anh ấy nói arraySort, nhưng anh ấy hỏi cách đảo ngược mảng và không sắp xếp nó. Giải pháp tốt, nếu mảng ban đầu được sắp xếp nếu không nó sẽ không hoạt động. –

+1

Mặc dù anh chàng này không cần nó, [java.util.Collections] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#reverse%28java.util .List% 29) hoạt động tốt để đảo ngược – Leigh

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

Sẽ thực hiện thủ thuật.

+1

Phạt tiền cho các mảng nhỏ - nhưng đắt tiền cho các mảng lớn –

+3

Ý tưởng hay nếu dữ liệu trong mảng đơn giản. Sẽ không hoạt động nếu một mảng của các đối tượng hoặc cấu trúc hoặc mảng. –

+0

Có điều này sẽ chỉ hoạt động đối với các loại đơn giản. – Paul

1

Tôi đã viết hàm này để đảo ngược mảng. Nó sửa đổi mảng và trả về nó.

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

Tôi đã thử nghiệm nó, và nó hoạt động trên mảng các chuỗi, cũng như đối tượng, vv

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

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

tôi đặt nó vào thành phần riêng của nó, vì vậy nó dễ dàng hơn để sử dụng trong khác nhau dự án.

1

FYI mảng trong CF chỉ là một ArrayList, vì vậy ...

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

Và tôi sẽ không bận tâm viết arrayReverse() vì mảng được truyền theo giá trị trong CF (không cho đến khi CF2016 của this.passArraybyReference) vì vậy nó siêu hiệu quả.

Các vấn đề liên quan