Wie kombiniere ich zwei Listen in Dart?

78

Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, zwei Listen in Dart zu verketten, um ein brandneues Listenobjekt zu erstellen. Ich konnte nichts und so etwas finden:

Meine Liste:

list1 = [1, 2, 3]
list2 = [4, 5, 6]

Ich habe es versucht:

var newList = list1 + list2;

Ich wollte die kombinierte Ausgabe von:

[1, 2, 3, 4, 5, 6]
Alex
quelle

Antworten:

197

Sie können verwenden:

var newList = new List.from(list1)..addAll(list2);

Wenn Sie mehrere Listen haben, können Sie Folgendes verwenden:

var newList = [list1, list2, list3].expand((x) => x).toList()

Ab Dart 2 können Sie jetzt Folgendes verwenden +:

var newList = list1 + list2 + list3;

Ab Dart 2.3 können Sie den Spread-Operator verwenden:

var newList = [...list1, ...list2, ...list3];
Alexandre Ardhuin
quelle
23
Eine Alternative (die es ermöglicht, viele Listen leicht zu verketten) : [list1, list2, list3, ...].expand((x) => x).toList();
Florian Loitsch
2
Beachten Sie, dass der + Operator nicht für Listen unterschiedlicher Typen verwendet werden kann. (In diesem Fall erhalten Sie einen Fehler wie type 'List<Widget>' is not a subtype of type 'List<Image>'.). Der Spread-Operator eignet sich jedoch hervorragend für diesen Anwendungsfall.
Sébastien
Können Sie bitte diese Frage überprüfen und mir etwas vorschlagen? stackoverflow.com/questions/62228799/…
Rocx
17

vielleicht konsequenter ~

var list = []..addAll(list1)..addAll(list2);
Ticore Shih
quelle
2
Alt weiß ich aber was ist der ..addAll()Grund warum nicht nur ein einziger Punkt?
Abbas.M
6
@ Abbas.M .. ist für die Verkettung, um ohne den doppelten Punkt zu tun, müssten Sie: list = []; list.addAll (list1); list.addAll (list2); So wie ich es sehe, bedeutet dies im Grunde, diese Funktion aufzurufen, aber zu ignorieren, was sie zurückgibt, und das Objekt, an dem wir gearbeitet haben, weiter zu bearbeiten.
csga5000
10

Die Antwort von Alexandres ist die beste, aber wenn Sie + wie in Ihrem Beispiel verwenden möchten, können Sie die Überladung des Darts-Operators verwenden:

class MyList<T>{
  List<T> _internal = new List<T>();
  operator +(other) => new List<T>.from(_internal)..addAll(other);
  noSuchMethod(inv){
    //pass all calls to _internal
  }
}

Dann:

var newMyList = myList1 + myList2;

Ist gültig :)

Daniel Robinson
quelle
6

Dart unterstützt jetzt die Verkettung von Listen mit dem +Operator.

Beispiel:

List<int> result = [0, 1, 2] + [3, 4, 5];
Erlend
quelle
5

Wenn Sie zwei Listen zusammenführen und Duplikate entfernen möchten, können Sie Folgendes tun:

var newList = [...list1, ...list2].toSet().toList(); 
Nüsse
quelle
beste Lösung, um doppelte Gegenstände zu vermeiden.👍
Fuad All
0

Wir können alle Elemente der anderen Liste mithilfe der addAll()Methode zur vorhandenen Liste hinzufügen .

Verwenden der addAll()Methode, um alle Elemente einer anderen Liste zur vorhandenen Liste hinzuzufügen. und Hängt alle iterierbaren Objekte an das Ende dieser Liste an.

Erweitert die Länge der Liste um die Anzahl der iterierbaren Objekte. Wirft ein, UnsupportedErrorwenn diese Liste eine feste Länge hat.

Listen erstellen

listone = [1,2,3]
listtwo = [4,5,6]

Listen kombinieren

 listone.addAll(listtwo);

Ausgabe:

[1,2,3,4,5,6]
Paresh Mangukiya
quelle