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]

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];

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);

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 :)



5

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

var newList = [...list1, ...list2].toSet().toList(); 

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]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.