flutter - 合计值并删除列表中的重复项
问题描述
我有这个列表,想对列表中的值求和并删除重复项
1 - 检查产品名称
2 - 如果 productName 等于,则求和 NumberOfItems
例如 :
"Orders":[
{
"productName":"Apple",
"NumberOfItems":"5"
},
{
"productName":"Orange",
"NumberOfItems":"2"
},
{
"productName":"Egg",
"NumberOfItems":"5"
},
{
"productName":"Apple",
"NumberOfItems":"3"
},
{
"productName":"Orange",
"NumberOfItems":"4"
},
{
"productName":"Egg",
"NumberOfItems":"9"
},
]
我需要的结果如下所示:(总和取决于产品名称)
"Orders":[
{
"productName":"Apple",
"NumberOfItems":"8"
},
{
"productName":"Orange",
"NumberOfItems":"6"
},
{
"productName":"Egg",
"NumberOfItems":"14"
},
]
解决方案
注意:此代码有 2 个循环,这意味着更慢。Igor Kharakhordin 回答得更聪明,但对于问这个问题的人来说可能很难。(因为他同时做两件事。)基本上我在做同样的事情。
String string = await rootBundle.loadString("asset/data/Orders.json");
Map orders = jsonDecode(string);
List orderList = orders["Orders"];
Map<String,int> sums = {};
for(int i = 0 ; i < orderList.length; i++){
dynamic item = orderList[i];
if(sums.containsKey(item["productName"])){
sums[item["productName"]] += int.parse(item["NumberOfItems"]);
}
else{
sums[item["productName"]] = int.parse(item["NumberOfItems"]);
}
}
List sumList = [];
sums.forEach((key,value)=>
sumList.add({
"productName":key,
"NumberOfItems":value.toString()
})
);
Map result = {
"Orders":sumList
};
print(jsonEncode(result));
结果
{
"Orders": [
{
"productName": "Apple",
"NumberOfItems": "8"
},
{
"productName": "Orange",
"NumberOfItems": "6"
},
{
"productName": "Egg",
"NumberOfItems": "14"
}
]
}
推荐阅读
- python - 从列的值创建新列 - Pandas
- python - 在 Python 中按共同日期加入时间序列(数据框和系列/列表问题)
- firebase - 似乎无法连接到 Firebase?
- reactjs - 包裹未加载 .scss 文件
- ruby-on-rails - 联网的 Ruby on Rails URL/地址?
- visual-studio-2015 - microsoft.sharepoint.client.dll 中发生了 system.net.webException 类型的未处理异常
- git - 在 golang 中导入私有 repo 时版本和 https 引用无效
- matlab - 按时间绘制值时出错:使用条形时出错:y 值必须是数字或持续时间数组
- groovy - Groovy 中枚举类 [enums.AdjustmentMessages] 的未知名称值 []
- r - group_by,查找组的值,返回值和原始data.frame?(有效地,使用 dplyr)