Dart:公共元素的总和作为一个单独的列表?
Dart: Sum of comman elements as an separate list?
在飞镖中。我有一份每月重复月的付款清单:
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 Reduce 方法(例如 reduce、fold、expand 等)和排序代码量
请帮帮我
试试这个:
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>
来总结你遇到的元素。然后我们将此地图的值作为结果。
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)]
}
在飞镖中。我有一份每月重复月的付款清单:
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 Reduce 方法(例如 reduce、fold、expand 等)和排序代码量
请帮帮我
试试这个:
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>
来总结你遇到的元素。然后我们将此地图的值作为结果。
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)]
}