ダーツでリスト内のオブジェクトを逆順に反復処理する効率的な方法はありますか? インデックスを使用することはできますが、それによってパフォーマンスが低下しますか (List<E>
リンクされたリストを使用して内部的に構築された場合)?
コンテキスト: オブジェクトを後ろから前に描いていますが、前から後ろに処理する必要があります
アリ
ダーツでリスト内のオブジェクトを逆順に反復処理する効率的な方法はありますか? インデックスを使用することはできますが、それによってパフォーマンスが低下しますか (List<E>
リンクされたリストを使用して内部的に構築された場合)?
コンテキスト: オブジェクトを後ろから前に描いていますが、前から後ろに処理する必要があります
アリ
問題#2804が修正されるまで、インデックスを使用してリストを逆順に繰り返す必要があります。Lasse RH Nielsen がかつて言ったので、パフォーマンスの懸念については良いはずです。
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);
}
}
}