如何根据对象的name和price属性过滤列表并去除重复项?
Dart 根据name和price属性过滤列表去重
要实现根据name和price组合去重、保留每个组合首次出现元素的需求,可以按以下方式实现:
1. 定义Model类(若未定义)
先确保你的数据类具备对应属性:
class Model { final String name; final double price; final String value; Model({required this.name, required this.price, required this.value}); // 可选:重写toString方便查看输出结果 @override String toString() { return 'Model(name: $name, price: $price, value: $value)'; } }
2. 实现去重过滤逻辑
用Set记录已出现的name+price组合,遍历原列表时只保留首次出现的元素:
void main() { List<Model> connectorList = [ Model(name: "Type A", price: 2.30, value: "Value 1"), Model(name: "Type B", price: 2.30, value: "Value 2"), Model(name: "Type C", price: 2.30, value: "Value 3"), Model(name: "Type A", price: 2.30, value: "Value 4"), Model(name: "Type B", price: 3.30, value: "Value 5"), Model(name: "Type B", price: 2.30, value: "Value 6"), ]; final seenCombinations = <String>{}; final filteredConnectorList = connectorList.where((model) { // 生成唯一标识键,组合name和price final key = '${model.name}_${model.price}'; if (seenCombinations.contains(key)) { return false; } seenCombinations.add(key); return true; }).toList(); // 验证输出结果 filteredConnectorList.forEach(print); }
结果说明
运行代码后得到的filteredConnectorList与你期望的输出一致:
[ Model(name: Type A, price: 2.3, value: Value 1), Model(name: Type B, price: 2.3, value: Value 2), Model(name: Type C, price: 2.3, value: Value 3), Model(name: Type B, price: 3.3, value: Value 5) ]
该逻辑会自动过滤掉name和price都重复的后续元素,只保留每个组合的第一个实例。
内容的提问来源于stack exchange,提问作者Kodala Parth
相关产品推荐
相关产品推荐

