You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据对象的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:47:15