如何在dart中找到数组中对象的值的总和?

我有一个如下所示的数组:

[{name: Cibo,quantity: 3},{name: Cibo,quantity: 2},{name: Invia Regalo,quantity: 1}]

如何通过组合相同的名称找到这些对象的总数?

所以输出看起来像:

[
{name: Invia Regalo,quantity: 4},quantity: 5},]

我尝试过类似的方法,但在 Dart 中不起作用。

var categoryTotal = [];

    category.forEach((category) {
      print(category);
      var categ =
          categoryTotal.firstWhere((cat) => cat['name'] == category['name']);
      print("Category is $categ");
      if (categ != null) {
        categ['quantity'] += category['quantity'];
      } else {
        categoryTotal.add(category);
      }
    });
    print(categoryTotal);
APPPA1234 回答:如何在dart中找到数组中对象的值的总和?

我一般不推荐使用映射映射来处理包含不同类型值的对象。相反,使用类。它使编写类型安全的代码变得更加容易。

此外,当您有多行代码时,我不建议使用 .forEach() 方法,因为它会使阅读变得困难。相反,请使用 for-each 循环。

我制定了以下解决方案来处理您的地图列表。 sumMap 用于通过使用 Map 处理 quantity 的总和来提高代码效率。然后根据 sumMap:

创建结果
void main() {
  final array = [
    {'name': 'Cibo','quantity': 3},{'name': 'Cibo','quantity': 2},{'name': 'Invia Regalo','quantity': 1},];

  final sumMap = <String,int>{};
  for (final map in array) {
    sumMap.update(
      map['name']! as String,(sum) => sum + (map['quantity']! as int),ifAbsent: () => map['quantity']! as int,);
  }

  final result = [
    for (final entry in sumMap.entries)
      {'name': entry.key,'quantity': entry.value}
  ];

  print(result);
  // [{name: Cibo,quantity: 5},{name: Invia Regalo,quantity: 4}]
}
,

您需要添加 orElse: () => null 以避免例外。因此,最终代码将如下所示:

var categoryTotal = [];

    category.forEach((category) {
      var categ = categoryTotal.firstWhere(
        (cat) => cat['name'] == category['name'],orElse: () => null,);
      if (categ != null) {
        categ['quantity'] += category['quantity'];
      } else {
        categoryTotal.add(category);
      }
    });
    print(categoryTotal);
本文链接:https://www.f2er.com/506.html

大家都在问