有没有一种有效的方式在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现在有一个解决方案。检查我对这个问题的回答。希望有所帮助! –