【问题标题】:Remove duplicate dart删除重复的飞镖
【发布时间】:2022-02-15 00:48:58
【问题描述】:

有一个清单:

@Koolkid3
@Peetea
@Peetea
@Ruptan
@bulunabu
@ptygma
@ptygma

以下是获得的:

@Koolkid3
@Ruptan
@bulunabu

如果有重复,那么您需要完全删除它们。因此,toSet() 在这里不起作用。怎么做?

【问题讨论】:

标签: flutter dart


【解决方案1】:

您可以将List 转换为Set 以删除重复项。如果需要再次将其转换为列表。

 List<String> list = ["a", "v", "a"];

 print(list.toSet().toList()); //[a, v]

删除重复项和自身

List<String> list = ["a", "v", "a"];

list.removeWhere(
  (String s1) => list.where((s2) => s1 == s2).length > 1,
);

print(list); /// [v]

【讨论】:

  • 不,我只需要 v 留在你的情况下
  • 您只剩下 1 个选项。如果有重复,则需要将其完全删除,您将有 1 个选项
  • 这个选项在语法上看起来不错,但它的时间复杂度为 O(n2),因为它将遍历列表中每个项目的完整列表。我的方法会表现得更好,但这个更容易理解:)
  • 好吧,我无法判断这一点,做forEach,创建新地图,使用containsKey 查找并再次迭代地图。它描述了过程但我更喜欢没有错误的快捷方式。
【解决方案2】:

下面的呢:

  List<String> list = [
    "@Koolkid3",
    "@Peetea",
    "@Peetea",
    "@Ruptan",
    "@bulunabu",
    "@ptygma",
    "@ptygma"
  ];
  var occurrenceCount = Map();

  list.forEach((x) => occurrenceCount[x] = !occurrenceCount.containsKey(x) ? (1) : (occurrenceCount[x] + 1));

  list.retainWhere((element) => occurrenceCount[element] == 1);
  print(list);

使用Map 计算每个项目的出现次数,然后使用retainWhere 只保留出现一次的项目。

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 2012-08-15
    • 2022-11-14
    • 1970-01-01
    • 2019-03-17
    • 2021-05-26
    • 2018-10-29
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多