2012-11-16 34 views
5

Có cách nào hiệu quả để lặp qua các đối tượng trong danh sách theo thứ tự ngược trong phi tiêu không? Tôi có thể sử dụng chỉ mục, nhưng điều đó có gây ra hiệu suất hay không (tức là nếu List<E> được xây dựng nội bộ bằng danh sách được liên kết)?Đảo ngược Iterator cho Danh sách?

Bối cảnh: Tôi vẽ các đối tượng từ sau ra trước, nhưng cần phải xử lý chúng từ trước ra sau

Ali

Trả lời

4

Cho đến vấn đề #2804 đã cố định, bạn phải lặp danh sách trong thứ tự ngược lại bằng cách sử dụng các chỉ số. Đối với mối quan tâm hiệu suất của bạn, nó phải là tốt vì Lasse R.H. Nielsen once said:

Lists trong Dart được dành cho truy cập ngẫu nhiên

+0

Cảm ơn. Tôi sẽ kết hợp với các chỉ số cho bây giờ –

+2

Dart hiện có giải pháp. Kiểm tra câu trả lời của tôi cho câu hỏi. Hy vọng rằng sẽ giúp! –

0

Nó sẽ được tốt đẹp nếu có một hiệu quả ngược lặp.

Trong thời gian chờ đợi, những gì bạn có thể làm là tạo danh sách có các liên kết ngược.

ví dụ:

class BackwardsLinked { 
    // properties, methods etc. 
    // as an example, just an int 
    int value; 

    BackwardsLinked(this.value); 

    BackwardsLinked previousItem; 

    String toString() => "[$value]"; 
} 

void main() { 
    // setting up the list 
    var list = new List<BackwardsLinked>(); 
    var anchor = new BackwardsLinked(0); 
    anchor.previousItem = null; 

    list.add(anchor); 

    for (int i = 1; i < 10; i++) { 
     list.add(new BackwardsLinked(i * 3)); 
     list[i].previousItem = list[i - 1]; 
    } 
    BackwardsLinked terminal = list[list.length - 1]; 

    // Iteration 
    print("Forwards, as usual:"); 
    for (BackwardsLinked link in list) { 
     // Do whatever with object 
     print(link); 
    } 

    print("Backwards:"); 
    { 
     BackwardsLinked link = terminal; 
     print(terminal); 
     while (link.previousItem != null) { 
      link = link.previousItem; 
      // Do whatever with object 
      print(link); 
     } 
    } 
} 
10

Bây giờ bạn có thể đảo ngược việc lặp lại danh sách trong Dart. Sử dụng reversed getter on List.

var fruits = ['apples', 'oranges', 'pears']; 
Iterable inReverse = fruits.reversed; 
var fruitsInReverse = inReverse.toList(); 
print(fruitsInReverse); // [pears, oranges, apples] 

Bạn có thể rút ngắn này để:

var fruits = ['apples', 'oranges', 'pears']; 
print(fruits.reversed.toList()); 

Xem API docs.

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