簡體   English   中英

Dart:comman 元素的總和作為單獨的列表?

[英]Dart: Sum of comman elements as an separate list?

在 dart。 我有一個每月重復月份的付款清單:

class Pay {
String month;
int amount;
}

final payments = [Pay("Jan",150),Pay("Jan",100),Pay("Mar",120),Pay("Mar",150)];

現在我的需要是,我需要通過添加常見月份付款來建立一個新列表,就像這樣

[
Pay("Jan",250),
Pay ("Mar",270),
]

我在嵌套的 for 循環中完成了此操作,但代碼在 Merge review 中被拒絕

我需要使用 Map 使用分類器數量的代碼減少諸如減少、折疊、展開等方法來嘗試它們

請幫我

嘗試這個:

main() {
  final payments = [
    Pay("Jan", 150),
    Pay("Jan", 100),
    Pay("Mar", 120),
    Pay("Mar", 150)
  ];
  Map<String, int> map = {};
  for (var pay in payments) {
    map[pay.month] =
        map[pay.month] == null ? pay.amount : map[pay.month]! + pay.amount;
  }
  List<Pay> newPays = [];
  map.forEach((key, value) => newPays.add(Pay(key, value)));
  print(newPays); //[Pay(Jan, 250), Pay(Mar, 270)]
}

您可以執行以下操作,其中您將foldMap<String, Pay>一起使用來總結遇到的元素。 然后我們將這個 map 的值作為結果。

class Pay {
  String month;
  int amount;

  Pay(this.month, this.amount);

  @override
  String toString() => 'Pay($month, $amount)';
}

void main() {
  final payments = [
    Pay("Jan", 150),
    Pay("Jan", 100),
    Pay("Mar", 120),
    Pay("Mar", 150)
  ];

  final paymentsSumList = payments
      .fold<Map<String, Pay>>(
        {},
        (map, pay) => map
          ..update(pay.month, (sumPay) => sumPay..amount += pay.amount,
              ifAbsent: () => Pay(pay.month, pay.amount)),
      )
      .values
      .toList();

  print(paymentsSumList); // [Pay(Jan, 250), Pay(Mar, 270)]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM