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

Dart按品牌分组并计算车辆数量总和实现方案

如何合并Dart中相同品牌的Car列表并计算数量总和?

嘿,这个需求很常见,我来给你两种可行的实现方式,都能精准得到你想要的结果——把相同品牌的车辆数量合并,最终得到仅包含各品牌总数量的Car列表。

首先先确认下你的Car类结构(我假设是这样的,如果你的类有细微差别,调整对应字段即可):

class Car {
  final String brand;
  int quantity;

  Car(this.brand, this.quantity);

  // 可选:重写toString方便查看输出结果
  @override
  String toString() => 'Car(brand: $brand, quantity: $quantity)';
}

方法一:使用dart:collection的groupBy(简洁高效)

这种方法借助Dart标准库的groupBy函数快速分组,再通过fold计算总和,代码简洁易读:

import 'dart:collection';

void main() {
  // 初始化你的原始Car列表
  List<Car> cars = [
    Car("nissan", 2),
    Car("nissan", 4),
    Car("toyota", 3),
    Car("nissan", 5),
    Car("toyota", 2),
  ];

  // 1. 按品牌分组,得到键为品牌名、值为对应Car列表的Map
  var groupedCars = groupBy(cars, (Car car) => car.brand);

  // 2. 遍历分组,计算每个品牌的总数量并生成新的Car列表
  List<Car> summedCars = groupedCars.entries.map((entry) {
    final brand = entry.key;
    final totalQuantity = entry.value.fold(0, (sum, car) => sum + car.quantity);
    return Car(brand, totalQuantity);
  }).toList();

  // 输出结果,会得到你要的[Car(brand: nissan, quantity: 11), Car(brand: toyota, quantity: 5)]
  print(summedCars);
}

代码解释:

  • groupBy:把原始列表按brand字段分组,帮你快速把相同品牌的Car归到一起;
  • fold:对每个品牌的Car列表做累加计算,初始值是0,每次迭代把当前Car的quantity加到总和里;
  • map + toList():把分组后的Map转换成你需要的List<Car>格式。

方法二:手动遍历累加(无需额外依赖)

如果不想导入dart:collection,也可以手动遍历原始列表,用一个临时Map来记录各品牌的总数量,最后再转成Car列表:

void main() {
  List<Car> cars = [
    Car("nissan", 2),
    Car("nissan", 4),
    Car("toyota", 3),
    Car("nissan", 5),
    Car("toyota", 2),
  ];

  // 临时Map,用来存每个品牌的总数量
  Map<String, int> brandQuantityMap = {};

  // 遍历原始列表,累加数量
  for (var car in cars) {
    if (brandQuantityMap.containsKey(car.brand)) {
      // 品牌已存在,累加数量
      brandQuantityMap[car.brand] = brandQuantityMap[car.brand]! + car.quantity;
    } else {
      // 品牌第一次出现,初始化数量
      brandQuantityMap[car.brand] = car.quantity;
    }
  }

  // 把Map转换成目标Car列表
  List<Car> summedCars = brandQuantityMap.entries
      .map((entry) => Car(entry.key, entry.value))
      .toList();

  print(summedCars);
}

这种方法逻辑更直观,适合新手理解,而且不需要依赖任何额外的库,直接就能运行。

内容的提问来源于stack exchange,提问作者Aexperty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:37:36