0

I have a set of items. From this i want to delete all duplicate values. i tried this finalList = [...{...users!}]; and this print(users.toSet().toList());. But both are printing all the data in the list. It didn't removing duplicate values. Below is my list

List users = [
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
  ];

Expected Output

List users = [
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
    {
      "userEmail":"[email protected]"
    },
  ];

2 Answers 2

2

Let's try, here you get the unique list

void main() {
  var users = [
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
  ];
  var uniqueList = users.map((o) => o["userEmail"]).toSet();
  print(uniqueList.toList());
}
Sign up to request clarification or add additional context in comments.

Comments

2

Your attempts don't work because most objects (including Map) use the default implementation for the == operator, which checks only for object identity. See: How does a set determine that two objects are equal in dart? and How does Dart Set compare items?.

One way to make the List to Set to List approach work is by explicitly specifying how the Set should compare objects:

import 'dart:collection';

void main() {
  var users = [
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
    {"userEmail": "[email protected]"},
  ];

  var finalList = [
    ...LinkedHashSet<Map<String, String>>(
      equals: (user1, user2) => user1['userEmail'] == user2['userEmail'],
      hashCode: (user) => user['userEmail'].hashCode,
    )..addAll(users)
  ];
  finalList.forEach(print);
}

2 Comments

It giving error Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Iterable<Map<String, String>>'
@MukSystem That's because your original List is a List<dynamic>. Fix that (as I did in the code above).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.