flutter 求单 dart 差

7nbnzgx9  于 2023-02-25  发布在  Flutter
关注(0)|答案(8)|浏览(154)

我有两个列表[1,2,3,4,5,6,7][3,5,6,7,9,10],我想得到第一个列表和第二个列表的差。
预期的输出将是[1,2,4],因为它们是列表1而不是列表2中仅有的元素。
我用的是飞箭和 dart 。我在网上查过了,我知道这看起来是个简单的问题,但是我什么都没找到。
应该无关紧要,但我使用的是iOS发布
我更喜欢没有foreach循环的答案,我想看看是否有一个库。

xv8emn3q

xv8emn3q1#

由于您将查找唯一元素,因此可以使用Set类(https://api.flutter.dev/flutter/dart-core/Set/difference.html)的difference方法来执行以下操作:

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

rmbxnbpk2#

你可以这样做:

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

备选答案:

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

注意,对于这两种情况,你都需要遍历更大的列表

jpfvwuh4

jpfvwuh43#

简单且推荐的方法是

var a = [1,2,3,4,5];
var b = [1,2];
a.removeWhere((element) => b.contains(element));
print(a); //[3, 4, 5]
1dkrff03

1dkrff034#

如果你需要单行线,就像这样做

print([1,2,3,4,5,6,7].where((e) => ![3,5,6,7,9,10].contains(e)).toList());

结果是

[1, 2, 4]
mftmpeh8

mftmpeh85#

这似乎很管用:

void main() {
  final l1 = [1, 2, 3];
  final l2 = [3, 4, 5];
  print(listDiff(l1, l2)); // [1, 2, 4, 5]
}

List<T> listDiff<T>(List<T> l1, List<T> l2) => (l1.toSet()..addAll(l2))
    .where((i) => !l1.contains(i) || !l2.contains(i))
    .toList();
bmp9r5qi

bmp9r5qi6#

可为空的变量使用!.contains

var a = [1,2,3,4,5,6,7];
var b = [3,5,6,7,9,10];
a.removeWhere((element) => b!.contains(element));
zzlelutf

zzlelutf7#

void main() {
    var listA = [1,2,3,4,5,6,7];
    var listB = [3,5,6,7,9,10];
    listB.map((e)=>listA.remove(e)).toList();
    print(listA);
}
ctrmrzij

ctrmrzij8#

因为list.contains()是一个O(n)操作,所以其他答案的性能很差,并且不考虑列表中的重复元素。
Myers diff algorithm可以帮助您比较两个列表。
下面是@knaeckeKami的dart实现。
https://github.com/knaeckeKami/diffutil.dart

相关问题