有沒有一種有效的方式在dart中以相反的順序遍歷列表中的對象?我可以使用索引,但會導致性能下降(即,如果List<E>
是使用鏈接列表在內部構建的)?反向迭代器的列表?
語境:我畫從後到前的對象,但需要從正面處理它們向後
阿里
有沒有一種有效的方式在dart中以相反的順序遍歷列表中的對象?我可以使用索引,但會導致性能下降(即,如果List<E>
是使用鏈接列表在內部構建的)?反向迭代器的列表?
語境:我畫從後到前的對象,但需要從正面處理它們向後
阿里
直到問題#2804一直固定,你必須遍歷列表使用索引的逆序。爲了您的性能問題,它應該是一件好事,因爲Lasse R.H. Nielsen once said:在DART
列表用於隨機存取
如果有一個高效的迭代向後這將是很好。
與此同時,你可以做的是創建一個向後鏈接的列表。
例如
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);
}
}
}
您現在可以顛倒Dart中列表的迭代。在List上使用reversed
獲得者。
var fruits = ['apples', 'oranges', 'pears'];
Iterable inReverse = fruits.reversed;
var fruitsInReverse = inReverse.toList();
print(fruitsInReverse); // [pears, oranges, apples]
您可以縮短這:
var fruits = ['apples', 'oranges', 'pears'];
print(fruits.reversed.toList());
見API docs。
謝謝。我現在堅持使用指數 –
Dart現在有一個解決方案。檢查我對這個問題的回答。希望有所幫助! –