Flutter如何对比两个列表 找出第二个列表中第一个列表缺失的元素
Flutter/Dart 列表差集实现方法
要获取存在于animalsTwo、但animalsOne中缺失的元素,直接用Dart内置的集合操作即可实现,针对你给出的示例代码,有两种常用实现方案:
方案1:Set差集法(推荐,性能更好)
Dart的Set结构自带差集计算API,先将两个列表转为Set,调用difference方法就能直接得到目标结果,写法简洁、大数据量下性能更优:
List animalsOne = ['Lion','Zebra','tiger','Chimpanzee','Rabbit']; List animalsTwo = ['Lion', 'Girrafe', 'tiger', 'Dog', 'Chimpanzee','Rabbit']; // 计算差集:存在于animalsTwo的Set、但不在animalsOne的Set中的元素 Set resultSet = animalsTwo.toSet().difference(animalsOne.toSet()); List result = resultSet.toList(); print(result); // 输出 [Girrafe, Dog],完全匹配预期结果
注意:该方案会自动对结果去重,如果
animalsTwo里有重复的缺失元素,最终结果只会保留一个。
方案2:遍历筛选法(支持保留重复元素)
如果你需要保留animalsTwo中缺失元素的重复项,可以用where方法遍历筛选,判断每个元素是否不存在于animalsOne中:
List animalsOne = ['Lion','Zebra','tiger','Chimpanzee','Rabbit']; List animalsTwo = ['Lion', 'Girrafe', 'tiger', 'Dog', 'Chimpanzee','Rabbit']; List result = animalsTwo.where((item) => !animalsOne.contains(item)).toList(); print(result); // 输出 [Girrafe, Dog]
注意:该方案因为每次判断都要遍历
animalsOne做contains匹配,在两个列表数据量都很大的场景下性能弱于Set差集法。
方案选型参考
- 普通业务场景、不需要保留重复差集元素:优先选Set差集法
- 需要保留重复的差集元素、列表数据量较小:选遍历筛选法
内容的提问来源于stack exchange,提问作者KEVIN
相关产品推荐
相关产品推荐

