Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何计算汇总表列表<;地图>;?_Flutter_Dart - Fatal编程技术网

Flutter 如何计算汇总表列表<;地图>;?

Flutter 如何计算汇总表列表<;地图>;?,flutter,dart,Flutter,Dart,我试图根据列表中的变量计算一个和。我有一个包含日期(月/年)和金额的地图列表,我想将其转换为一个地图列表,其中金额是每个日期所有“金额”的总和 我当前要转换的列表如下所示 [{姓名:8/2020,金额:61606.50},{姓名:9/2020,金额:18481.95},{姓名:9/2020,金额:12937.36},{姓名:9/2020,金额:9056.16},{姓名:9/2020,金额:6339.31},{姓名:9/2020,金额:4437.52},{姓名:9/2020,金额:1725.70}

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

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

[{姓名:8/2020,金额:61606.50},{姓名:9/2020,金额:18481.95},{姓名:9/2020,金额:12937.36},{姓名:9/2020,金额:9056.16},{姓名:9/2020,金额:6339.31},{姓名:9/2020,金额:4437.52},{姓名:9/2020,金额:1725.70},{姓名:9/2020,金额:1725.70},{姓名:8/2020,金额:20535,金额:6867}]
我想变成这样:

[{8/2020:total},{9/2020:total}]

我的代码:

List _List=[];
var map=map();
var foodList=Provider.of(上下文);
var list=foodList.map((e){
地图(Map),;
列表(u List),;
_列表=e.consumed.map((elo){
日期时间日期;
日期=日期时间。从毫秒到新纪元(elo['date']);
var测试=日期格式('yM')。格式(日期);
双倍价格=e.price*elo[‘金额’];
_地图={
“名称”:测试,
“金额”:固定价格(2),
};
返回图;
}).toList();
返回列表;
}).toList();
list.forEach((e)=>u list.addAll(e));
打印(_列表);
_list.forEach((x){
var检验;
测试=x['name'];
返回映射[测试]=!map.containsKey(测试)?(1):(映射[测试]+1);
});
如果(map.isNotEmpty)打印(map);

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

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

final result=list.fold({},(rMap,元素){
最终键=元素['name'];
如果(rMap[键]==null)
rMap[key]=0;
rMap[key]+=元素['amount'];
返回rMap;
});
打印(结果);//{8/2020: 82142, 9/2020: 123155.37}

当简单的
折叠就足够时,就不需要使用
groupBy
功能。