有没有一种简单的方法可以在Dart中组合两个列表?

时间:2014-02-17 10:21:39

标签: list generics dart

我想知道是否有一种简单的方法可以在dart中组合两个列表来创建一个全新的列表对象。我找不到任何类似的东西:

var newList = list1 + list2;

无效。

8 个答案:

答案 0 :(得分:52)

您可以使用:

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

如果您有多个列表,可以使用:

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

从Dart 2.3开始,您可以使用点差运算符:

var newList = [...list1, ...list2, ...list3];

答案 1 :(得分:12)

可能更一致〜

var list = []..addAll(list1)..addAll(list2);

答案 2 :(得分:6)

Alexandres的回答是最好的,但如果你想在你的例子中使用+ like,你可以使用Darts运算符重载:

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
  }
}

然后:

var newMyList = myList1 + myList2;

有效:)

答案 3 :(得分:6)

如果要合并两个列表并删除重复项,可以这样做:

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

答案 4 :(得分:0)

立即使用<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#D6D5D5" tools:context=".UpcomingTrips"> <fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="0dp" android:layout_height="150dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/notesText" /> </androidx.constraintlayout.widget.ConstraintLayout> 运算符将列表supports串联起来。

示例:

+

答案 5 :(得分:0)

我们可以使用addAll()方法将其他列表的所有元素添加到现有列表中。

使用addAll()方法将另一个列表的所有元素添加到现有列表中。并将所有iterable对象附加到此列表的末尾。

通过可迭代的对象数扩展列表的长度。如果此列表是固定长度的,则抛出UnsupportedError

创建列表

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

合并列表

 listone.addAll(listtwo);

输出:

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

答案 6 :(得分:0)

我认为无需创建第三个列表...

使用此:

list1 = [1, 2, 3];
list2 = [4, 5, 6];
list1.addAll(list2);

print(list1); 
// [1, 2, 3, 4, 5, 6] // is our final result!

答案 7 :(得分:0)

addAll 是合并两个列表的最常用方法。

但是要连接列表列表,您可以使用这三个函数中的任何一个(下面的示例):

  • expand - 将 Iterable 的每个元素扩展为零个或多个元素,
  • fold - 通过迭代组合集合的每个元素与现有值,将集合减少为单个值
  • reduce - 通过使用提供的函数迭代组合集合的元素,将集合减少为单个值。
void main() {
  List<int> a = [1,2,3];
  List<int> b = [4,5];
  List<int> c = [6];
  List<List<int>> abc = [a,b,c]; // list of lists: [ [1,2,3], [4,5], [6] ]
  List<int> ints = abc.expand((x) => x).toList();
  List<int> ints2 = abc.reduce((list1,list2) => list1 + list2);
  List<int> ints3 = abc.fold([], (prev, curr) => prev + curr); // initial value is []
  print(ints);  // [1,2,3,4,5,6]
  print(ints2); // [1,2,3,4,5,6]
  print(ints3); // [1,2,3,4,5,6]
}