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

208

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

我的列表:

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

我尝试过:

var newList = list1 + list2;

我想要合并输出以下内容:

[1, 2, 3, 4, 5, 6]
14个回答

3

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

可以使用这个:

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

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

2
方法1 -> 通过使用addAll()函数
var array1 = [1, 2, 3];
var array2 = [4, 5, 6];
array1.addAll(array2); // array1 is now [1, 2, 3, 4, 5, 6]

方法二 -> 通过使用“循环”。
var array1 = [1, 2, 3];
var array2 = [4, 5, 6];
array2.forEach((item) {
   array1.add(item);
}); // array1 is now [1, 2, 3, 4, 5, 6]

方法三 -> 通过使用 "+" 运算符。
var array1 = [1, 2, 3];
var array1 = [4, 5, 6];
var newArray = array1 + array1;  // array1 is now [1, 2, 3, 4, 5, 6]

1
 list1.followedBy(list2).toList();

2
如果您提供为什么这是首选解决方案以及解释其工作原理的说明,那将更有帮助。我们想要教育,而不仅仅提供代码。 - the Tin Man

0
关于性能的一点说明。请记住,使用所有这些“reduce”方法将为每个操作创建另一个列表。
因此,对于更大的列表,最高效的方式(尤其是对于列表的列表)始终是“老好的C风格”。
List<T> concatLists<T>(List<List<T>> listOfLists, [bool isGrowable = true]) {
  if (listOfLists.first.isEmpty) {
    throw Exception('first list of lists cannot be empty');
  }

  int totalLength = 0;
  for (final list in listOfLists) {
    totalLength += list.length;
  }

  List<T> result =
      List<T>.filled(totalLength, listOfLists[0][0], growable: isGrowable);
  int idx = 0;
  for (final list in listOfLists) {
    for (final item in list) {
      result[idx] = item;
      idx += 1;
    }
      // result.addAll(list); // at least 2x longer
  }

  return result;
}

当然,我也喜欢使用类似于[...list1, ...list2]这样的语法糖,但对于更大的数据块,你需要一些更加优化的方法。例如,将存储在List>中的50MB数据字节转换为一个List。
与其他方法相比,这种方法至少快2倍。我测试了list1 + list2和listOfLists.reduce(...)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接