24

ダーツでリスト内のオブジェクトを逆順に反復処理する効率的な方法はありますか? インデックスを使用することはできますが、それによってパフォーマンスが低下しますか (List<E>リンクされたリストを使用して内部的に構築された場合)?

コンテキスト: オブジェクトを後ろから前に描いていますが、前から後ろに処理する必要があります

アリ

4

3 に答える 3

9

問題#2804修正されるまで、インデックスを使用してリストを逆順に繰り返す必要があります。Lasse RH Nielsen がかつて言ったので、パフォーマンスの懸念については良いはずです。

Dart のリストはランダム アクセスを目的としています

于 2012-11-16T13:38:27.407 に答える
0

効率的な後方反復があればいいのですが。

それまでの間、後方リンクを含むリストを作成することができます。

例えば

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);
        }
    }
}
于 2012-11-16T15:07:04.220 に答える