[英]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)]
}
您可以執行以下操作,其中您將fold
與Map<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.