【问题标题】:Dart/Flutter - Keep only duplicate items in ListDart/Flutter - 仅保留列表中的重复项
【发布时间】:2020-12-03 14:10:27
【问题描述】:

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

例子:

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

结果:[1, 2]

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

【问题讨论】:

标签: flutter dart


【解决方案1】:

这样的?

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

【讨论】:

  • 如果列表中有 1 个为空怎么办?那会出问题吗?还是只是复制“非空列表”?
  • 试试看?如果两个列表中的任何一个(或两个)为空,则返回一个空列表。
  • 好的。谢谢它似乎做我需要的。如果列表为空,我只需要检查一些 if 语句:)
  • 不确定我是否理解 if 的必要性。不是要求您想要两个列表中的元素,并且如果其中一个列表为空,您是否希望返回的列表也为空?
  • 不,如果列表中的 1 个为空,我希望它返回非空列表的值。但它现在适用于你的东西和一些 if 语句,所以谢谢。我会尽快接受你的回答
【解决方案2】:

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

我会这样解决:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2020-05-06
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多