如何从 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 .
使 List
到 Set
到 List
方法起作用的一种方法是明确指定 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);
}
我有一套物品。从这里我想删除所有重复的值。我试过了
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
)使用 ==
运算符的默认实现,它仅检查对象标识。参见:
使 List
到 Set
到 List
方法起作用的一种方法是明确指定 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);
}