如何在Dart中合并两个列表?


79

我想知道是否有一种简单的方法可以在dart中连接两个列表以创建一个全新的列表对象。我找不到任何东西,像这样:

我的列表:

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

我试过了:

var newList = list1 + list2;

我想要以下的组合输出:

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

Answers:


198

您可以使用:

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

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

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

从Dart 2开始,您现在可以使用+

var newList = list1 + list2 + list3;

从Dart 2.3开始,您可以使用传播运算符:

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

23
一种替代(其允许容易地串连许多列表):[list1, list2, list3, ...].expand((x) => x).toList();
Florian Loitsch 2014年

2
请注意,+ 不能在不同类型的列表上使用运算符。(在这种情况下,您会收到类似的错误type 'List<Widget>' is not a subtype of type 'List<Image>')。但是,散布运算符在此用例中效果很好。
塞巴斯蒂安

您能检查一下这个问题并向我提出建议吗?stackoverflow.com/questions/62228799/...
Rocx

17

也许更一致〜

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

2
老我知道,但..addAll()为什么不只是一个点呢?
阿巴斯M

6
@ Abbas.M ..用于链接,要消除双点,您必须:list = []; list.addAll(list1); list.addAll(list2); 从我的角度来看,它基本上意味着调用此函数,但是忽略它返回的内容,并继续对我们正在操作的对象进行操作。
csga5000 '19

10

Alexandres的答案是最好的,但是如果您想像示例中那样使用+,则可以使用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;

已验证 :)


6

Dart现在支持使用+运算符连接列表。

例:

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

6

如果要合并两个列表并删除重复项,可以执行以下操作:

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

以防止重复items.👍最佳的解决方案
福阿德所有的

0

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

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

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

建立清单

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

合并清单

 listone.addAll(listtwo);

输出:

[1,2,3,4,5,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!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.