如何从 Dart 列表中删除重复项 |扑

How to Delete duplicate items from a List Dart | Flutter

我有一套物品。从这里我想删除所有重复的值。我试过了 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"
    },
  ];

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

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());
}

您的尝试无效,因为大多数对象(包括 Map)使用 == 运算符的默认实现,它仅检查对象标识。参见: and .

使 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);
}