【问题标题】:How to Delete duplicate items from a List Dart | Flutter如何从列表 Dart 中删除重复项 |扑
【发布时间】:2021-12-10 15:56:34
【问题描述】:

我有一套物品。从这里我想删除所有重复的值。我试过这个 finalList = [...{...users!}]; 和这个print(users.toSet().toList());。但两者都在打印列表中的所有数据。它没有删除重复的值。以下是我的清单

List users = [
    {
      "userEmail":"tintu@gmail.com"
    },
    {
      "userEmail":"john@gmail.com"
    },
    {
      "userEmail":"tintu@gmail.com"
    },
    {
      "userEmail":"rose@gmail.com"
    },
    {
      "userEmail":"john@gmail.com"
    },
  ];

预期输出

List users = [
    {
      "userEmail":"tintu@gmail.com"
    },
    {
      "userEmail":"john@gmail.com"
    },
    {
      "userEmail":"rose@gmail.com"
    },
  ];

【问题讨论】:

    标签: list flutter dart flutter-dependencies flutter-web


    【解决方案1】:

    让我们试试,这里你得到唯一列表

    void main() {
      var users = [
        {"userEmail": "tintu@gmail.com"},
        {"userEmail": "john@gmail.com"},
        {"userEmail": "tintu@gmail.com"},
        {"userEmail": "rose@gmail.com"},
        {"userEmail": "john@gmail.com"},
      ];
      var uniqueList = users.map((o) => o["userEmail"]).toSet();
      print(uniqueList.toList());
    }
    

    【讨论】:

      【解决方案2】:

      您的尝试不起作用,因为大多数对象(包括Map)使用== 运算符的默认实现,它只检查对象身份。请参阅:How does a set determine that two objects are equal in dart?How does Dart Set compare items?

      使ListSetList 方法起作用的一种方法是明确指定Set 应如何比较对象:

      import 'dart:collection';
      
      void main() {
        var users = [
          {"userEmail": "tintu@gmail.com"},
          {"userEmail": "john@gmail.com"},
          {"userEmail": "tintu@gmail.com"},
          {"userEmail": "rose@gmail.com"},
          {"userEmail": "john@gmail.com"},
        ];
      
        var finalList = [
          ...LinkedHashSet<Map<String, String>>(
            equals: (user1, user2) => user1['userEmail'] == user2['userEmail'],
            hashCode: (user) => user['userEmail'].hashCode,
          )..addAll(users)
        ];
        finalList.forEach(print);
      }
      

      【讨论】:

      • 我收到错误方法 '[]' 不能无条件调用,因为接收者可以是 'null'。尝试使调用有条件(使用 '?.')或添加 null检查目标('!')。当我添加空检查它给出错误运算符'[]'没有为类型'Object'定义。尝试定义运算符'[]'。没有空安全它可以正常工作。
      • @MukSystem 糟糕,已修复。
      • 它给出错误 Unhandled Exception: type 'List' is not a subtype of type 'Iterable>'
      • @MukSystem 那是因为你原来的ListList&lt;dynamic&gt;。修复它(就像我在上面的代码中所做的那样)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2019-12-07
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多