【发布时间】:2022-02-15 00:48:58
【问题描述】:
有一个清单:
@Koolkid3
@Peetea
@Peetea
@Ruptan
@bulunabu
@ptygma
@ptygma
以下是获得的:
@Koolkid3
@Ruptan
@bulunabu
如果有重复,那么您需要完全删除它们。因此,toSet() 在这里不起作用。怎么做?
【问题讨论】:
-
@YeasinSheikh no
有一个清单:
@Koolkid3
@Peetea
@Peetea
@Ruptan
@bulunabu
@ptygma
@ptygma
以下是获得的:
@Koolkid3
@Ruptan
@bulunabu
如果有重复,那么您需要完全删除它们。因此,toSet() 在这里不起作用。怎么做?
【问题讨论】:
您可以将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]
【讨论】:
forEach,创建新地图,使用containsKey 查找并再次迭代地图。它描述了过程但我更喜欢没有错误的快捷方式。
下面的呢:
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 只保留出现一次的项目。
【讨论】: