飞镖/颤振-在列表中仅保留重复项

时间:2020-08-13 17:08:34

标签: flutter dart

所以我正在Flutter上开发一个应用程序,长话短说:我有2个“过滤器选项”,可创建2个单独的列表。现在我要使用的是这两个列表,找到两个列表中都存在的项目,然后将该项目添加到第三个列表中。

示例:

列表 first_list = [1、2、3、4、5];
List second_list = [1、2、8、9];

结果:[1、2]

我知道我可能会遍历1个列表,然后用'contains()'检查该项目是否在另一个列表中。但这可能是1个(或两个)列表为空,然后我的第三个列表将为空,因为我永远不会循环将重复项添加到第三个列表中

2 个答案:

答案 0 :(得分:1)

您需要的是两个集合之间的交集。最有可能的是,不使用列表,而是使用项目集。

我会这样解决:

void main() {
  List<int> first_list = [1, 2, 3, 4, 5];
  List<int> second_list = [1, 2, 8, 9];
  
  final shared = first_list.toSet().intersection(second_list.toSet());
  print(shared);
}

如果您可以使用集合而不是列表,它将更加简单:

void main() {
  Set<int> first_list = {1, 2, 3, 4, 5};
  Set<int> second_list = {1, 2, 8, 9};
  
  final shared = first_list.intersection(second_list);
  print(shared);
}

答案 1 :(得分:0)

像这样吗?

void main() {
  List<int> first_list = [1, 2, 3, 4, 5];
  List<int> second_list = [1, 2, 8, 9];

  final shared = [...first_list.where(second_list.contains)];
  print(shared); // [1, 2]
}