【问题标题】:How to calculate sum form List < Map >?如何计算和形式 List < Map >?
【发布时间】:2020-08-24 21:26:06
【问题描述】:

我正在尝试根据 List 中的变量计算总和。我有一个包含日期(月/年)和金额的地图列表,我想将其转换为地图列表,其中金额是每个日期的所有“金额”的总和。

我当前想要转换的列表如下所示

[{name: 8/2020, amount: 61606.50}, {name: 9/2020, amount: 18481.95}, {name: 9/2020, amount: 12937.36}, {name: 9/2020, amount: 9056.16}, {name: 9/2020, amount: 6339.31}, {name: 9/2020, amount: 4437.52}, {name: 9/2020, amount: 1725.70}, {name: 9/2020, amount: 1725.70}, {name: 8/2020, amount: 20535.50}, {name: 9/2020, amount: 68451.67}]

我想变成那样:

[{2020 年 8 月:总计},{2020 年 9 月:总计}]

我的代码:

    List _list = [];

    var map = Map();

    var foodList = Provider.of<List<FoodItem>>(context);

    var list = foodList.map((e) {
      Map _map;

      List _list;
      _list = e.consumed.map((elo) {
        DateTime date;

        date = DateTime.fromMillisecondsSinceEpoch(elo['date']);

        var test = DateFormat('yM').format(date);

        double _price = e.price * elo['amount'];

        _map = {
          'name': test,
          'amount': _price.toStringAsFixed(2),
        };

        return _map;
      }).toList();
      return _list;
    }).toList();

    list.forEach((e) => _list.addAll(e));

    print(_list);

    _list.forEach((x) {
      var test;

      test = x['name'];

      return map[test] = !map.containsKey(test) ? (1) : (map[test] + 1);
    });

    if (map.isNotEmpty) print(map);

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以使用列表中的fold 来实现:

    final result = list.fold<Map<String, double>>({}, (rMap, element) {
      final key = element['name'];
      if (rMap[key] == null)
        rMap[key] = 0;
      rMap[key] += element['amount'];
      return rMap;
    });
    
    print(result); // {8/2020: 82142, 9/2020: 123155.37}
    

    【讨论】:

      【解决方案2】:

      我认为解决问题的最佳方法是使用collection 包。有关更多详细信息和示例,请参阅here。简而言之,这个包包含一个您正在寻找的函数groupBy(类似于 SQL,它简化了对集合的处理)。

      【讨论】:

      • 只要一个简单的fold 就足够了,就不需要使用groupBy 函数了。
      猜你喜欢
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多