我有一个复杂对象列表。如何使用其ID区分列表?
我不能使用toSet和类似的东西,因为来自对象的哈希码都是不同的。
[1)香草飞镖
在列表中循环浏览,将ID添加到集合中。每当您将ID添加到尚不存在的ID时,就将该元素添加到新的不同值列表中。
void main() {
var list = [
Data('a'),
Data('a'),
Data('b'),
Data('c'),
];
var idSet = <String>{};
var distinct = <Data>[];
for (var d in list) {
if (idSet.add(d.id)) {
distinct.add(d);
}
}
}
class Data {
Data(this.id);
final String id;
}
2)软件包
存在多个在默认情况下扩展Iterable
实用程序方法的程序包,例如flinq或darq。它们添加了distinct
方法,您可以调用该方法以根据成员的某些属性轻松获取列表的唯一成员列表。
import 'package:darq/darq.dart`;
void main() {
var list = [
Data('a'),
Data('a'),
Data('b'),
Data('c'),
];
var distinct = list.distinct((d) => d.id).toList();
}
(免责声明,我是darq的维护者。)>