获取列表 flutter dart 的差异

She*_* S. 11 dart flutter

我有两个列表[1,2,3,4,5,6,7][3,5,6,7,9,10]. 我想得到第一个列表和第二个列表的差异。

预期的输出是[1,2,4]因为这些是仅列表 1 而不是列表 2 中的唯一元素。

我正在使用 Flutter 和 Dart。我在互联网上查了一下,我知道这似乎是一个简单的问题,但我找不到任何东西。

应该无关紧要,但我正在使用 iOS 发布

我更喜欢没有 foreach 循环的答案,我想看看是否有一个库。

Pjo*_*lin 13

由于您将寻找独特的元素,您可以使用 Set 类(https://api.flutter.dev/flutter/dart-core/Set/difference.html)的差异方法来执行以下操作:

List<int> first = [1,2,3,4,5,6,7];
List<int> second = [3,5,6,7,9,10];
List<int> difference = first.toSet().difference(second.toSet()).toList();
print(difference.toString());
// prints [1, 2, 4]
Run Code Online (Sandbox Code Playgroud)


Kar*_*mry 12

你可以这样做:

List<double> first = [1,2,3,4,5,6,7];
List<double> second = [3,5,6,7,9,10];
List<double> output = [];

first.forEach((element) {
    if(!second.contains(element)){
    output.add(element);
}
});

//at this point, output list should have the answer
Run Code Online (Sandbox Code Playgroud)

替代答案:

List<double> first = [1,2,3,4,5,6,7];
List<double> second = [3,5,6,7,9,10];
List<double> output = first.where((element) => !second.contains(element));
Run Code Online (Sandbox Code Playgroud)

请注意,对于这两种情况,您都需要遍历较大的 list


Abh*_*ire 6

简单且推荐的方法是

var a = [1,2,3,4,5];
var b = [1,2];
a.removeWhere((element) => b.contains(element));
print(a); //[3, 4, 5]
Run Code Online (Sandbox Code Playgroud)