如何从列表 Dart 中删除重复项 |扑
Posted
技术标签:
【中文标题】如何从列表 Dart 中删除重复项 |扑【英文标题】:How to Delete duplicate items from a List Dart | Flutter 【发布时间】: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"
,
];
【问题讨论】:
【参考方案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?。
使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);
【讨论】:
我收到错误方法 '[]' 不能无条件调用,因为接收者可以是 'null'。尝试使调用有条件(使用 '?.')或添加 null检查目标('!')。当我添加空检查它给出错误运算符'[]'没有为类型'Object'定义。尝试定义运算符'[]'。没有空安全它可以正常工作。 @MukSystem 糟糕,已修复。 它给出错误 Unhandled Exception: type 'ListList
是List<dynamic>
。修复它(就像我在上面的代码中所做的那样)。以上是关于如何从列表 Dart 中删除重复项 |扑的主要内容,如果未能解决你的问题,请参考以下文章