首页 > 解决方案 > 在嵌套列表中使用 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 时,我得到了与以前相同的结构。

标签: listflutterdartset

解决方案


operator ==对于大多数 Dart 对象,包括Lists、Sets 和Maps,只检查对象身份不执行深度相等检查。也就是说,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]}
}

推荐阅读