list - 在嵌套列表中使用 Set 删除重复数据 (Dart)
问题描述
我在从嵌套列表中删除重复数据时遇到问题,我需要删除在列表的索引 0 中不重复的记录,但是当列表嵌套时,Set 方法没有做任何事情。
for (int i = 0; i < items.length; i++) {
sections.add([items[i].sectionG, items[i].logo]);
}
sections = sections.toSet().toList();
Imagen de la estructura de la lista
当我通过 Set 时,我得到了与以前相同的结构。
解决方案
operator ==
对于大多数 Dart 对象,包括List
s、Set
s 和Map
s,只检查对象身份,不执行深度相等检查。也就是说,List
即使两个单独的对象包含相同的元素,它们也不会比较相等。
您将需要创建一个Set
执行深度相等检查的。package:collection
提供一个EqualitySet
可以使用ListEquality
对象来比较List
元素的类:
import 'package:collection/collection.dart';
void main() {
var listOfLists = [
[1, 2, 3],
[1, 2],
[1, 2, 3, 4],
[1, 2, 3],
];
var set = EqualitySet.from(ListEquality<int>(), listOfLists);
print(set); // Prints: {[1, 2, 3], [1, 2], [1, 2, 3, 4]}
}
推荐阅读
- javascript - 如何从无状态组件外部但在同一个文件中的函数访问类对象?
- r - 用于在 R 中循环具有不同后缀的常用变量名的函数
- sql - 日志状态值的 SQL 查询
- html - Div 仅水平打印
- c# - X的值在增加时重置
- python-3.x - 如何在 wsl2 上从 python3 运行 Selenium ChromeDriver?
- android - 资源 ID 在 Android Gradle 插件 5.0 版中将是非最终的,请避免在 switch case 语句中使用它们
- c++ - 新标准版本的 C++ 中是否有过无声的行为变化?
- javascript - Moment JS:倒计时没有计算正确的差异并让它倒计时
- javascript - 无法以 Flatlist 格式显示数组