如何查找两个List<int>列表的差异,获取差集元素
以下是Dart语言场景下的几种实现方案:
- 方案1:基础写法(适用于小体量列表)
直接遍历list2筛选不在list1中的元素即可,写法最简单直观:
List<int> list1 = [1,2,3,4,5]; List<int> list2 = [1,2,3,4,5,6,7]; List<int> onlyInList2 = list2.where((element) => !list1.contains(element)).toList(); // 最终输出 [6,7]
- 方案2:高效写法(适用于大体量列表)
如果list1元素较多,可先将list1转为Set降低查找成本,Set的contains操作时间复杂度为O(1),比List的O(n)效率高很多:
List<int> list1 = [1,2,3,4,5]; List<int> list2 = [1,2,3,4,5,6,7]; final set1 = Set.from(list1); List<int> onlyInList2 = list2.where((element) => !set1.contains(element)).toList();
- 方案3:Set差集写法(Dart 2.15+支持)
如果不需要保留list2中的重复元素,可直接调用Set自带的difference方法快速计算差集:
List<int> list1 = [1,2,3,4,5]; List<int> list2 = [1,2,3,4,5,6,7]; final diffSet = Set.from(list2).difference(Set.from(list1)); List<int> onlyInList2 = diffSet.toList();
注意:该方案会自动去重,若list2存在多个相同的目标元素(如
[6,6,7]),最终结果只会保留一个6,有保留重复元素需求请选用方案2。
内容的提问来源于stack exchange,提问作者rozerro
相关产品推荐
相关产品推荐

