首页 > 解决方案 > 如何对数组元素 int Dart 求和

问题描述

我有一个看起来像这样的数组

final value = [
  {
  'category': 'Social Life', 
  'data': [
        {'amount': 2000, 'content': 'thanks'}
        ]
  }, 
  {
  'category': 'Food', 
  'data': [
        {'amount': 2000, 'content': 'thanks'}, 
        {'amount': 2000, 'content': 'thanks'}
        ]
   }
]

想用fold()方法计算每个类别的数量,但是不知道怎么实现

我希望它们在我的新变量中看起来像这样

    final newValue = [
      {
      'category': 'Social Life', 
      'amount': //the amount for 'Social Life' category,  
      }, 
      {
      'category': 'Food', 
      'amount': //the amount for 'Food' category, 
      }
    ]

标签: arraysdartsum

解决方案


这应该可以解决问题。

void main() {
  final value = [
    {
      'category': 'Social Life',
      'data': [
        {'amount': 2000, 'content': 'thanks'}
      ]
    },
    {
      'category': 'Food',
      'data': [
        {'amount': 2000, 'content': 'thanks'},
        {'amount': 2000, 'content': 'thanks'}
      ]
    }
  ];

  print(combineData(value));
  // [{category: Social Life, amount: 2000}, {category: Food, amount: 4000}]
}

List<Map<String, Object>> combineData(List<Map<String, Object>> value) => value
    .map((entry) => {
          'category': entry['category'],
          'amount': (entry['data'] as List<Map<String, Object>>).fold<int>(
              0, (prev, element) => prev + (element['amount'] as int))
        })
    .toList();

推荐阅读