arrays - 如何不在列表飞镖中重复相同的项目?
问题描述
我创建了一个 listView 和按钮,当我单击该按钮时,它会将一个项目添加到 listView。
问题是我实际上不想在列表中重复相同的项目。
我已经尝试过 .contains 方法,但它没有用。
我想要一个好的解决方案,
解决方案
有不同的方法可以实现这一点:
1)迭代列表并检查每个元素是否不具有您认为相等的属性:
items = [Item(id: 1), Item(id: 2)];
newItem = Item(id: 2);
if (items.every((item) => item.id != newItem.id)) {
items.add(newItem);
}
2)在具有您认为相等的属性的对象类中使用contains()
和覆盖== operator
(也覆盖hashCode
)。
items = [Item(id: 1), Item(id: 2)];
newItem = Item(id: 2);
if (!items.contains(newItem)) {
items.add(newItem);
}
// inside Item class
@override
bool operator ==(other) {
return this.id == other.id;
}
@override
int get hashCode => id.hashCode;
3)而不是List
use Set
,每个元素只能出现一次。它的默认实现是LinkedHashSet
跟踪订单。
推荐阅读
- flutter - FileSystemException:无法检索文件的长度,路径 = '
- azure - 如何使用 Spring Boot 应用程序从 azure key vault 获取或检索密钥/秘密
- java - 使用 Spring Authorization Server 自定义 authenticationProvider
- javascript - Javascript 查询选择器字符串与预期的模式不匹配
- java - 保存时 VS 代码编辑 Java
- azure-devops - Terraform Azure Devops 提供程序
- sql - SQL server 中最大外键引用的问题
- spring - Spring 和 Hibernate 中的嵌套事务
- php - 这是检查该值是否为空的最有效方法吗?
- python - 使用 PyJWT 在 Python 中解码 Firebase JWT