首页 > 解决方案 > 合计值并删除列表中的重复项

问题描述

我有这个列表,想对列表中的值求和并删除重复项

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"
    },
]

标签: flutterdart

解决方案


注意:此代码有 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"
        }
    ]
}

推荐阅读