问题描述
这就是我想做的,比我现在做的更好。
销售人员在统计他的销售额。每天输入他的数据并为我们提供如下列表:
List<int> weekOneDaily = [3,4,2,7,13,34,22];
我想从上面的列表中创建一个运行总列表,这样每一天都会作为自己的条目添加到下一个:
List<int> cumulativeDaily = [3,9,16,29,63,85];
我目前正在成功地这样做:
List<int> dailySales = [2,23,18];
List<int> cumulativeSales =[];
/// Create cumulative list totals
void getCumulative(List<int> list) {
cumulativeSales.add(list.first);
for (var index in list) {
(index == list.first)
? cumulativeSales.add(index)
: cumulativeSales.add(cumulativeSales.last += index);
}
cumulativeSales.removeLast();
print('CUMULATIVE: $cumulativeSales');
}
getCumulative(dailySales);
这有点奇怪,因为它提供了两个相同的最后一个元素,所以我需要删除最后一个并且需要预渲染第一个才能使其工作。
请注意我不想这样做video
解决方法
我会正确地做这样的事情:
/// Create cumulative list totals
List<int> getCumulative(List<int> list) => list.fold(
[],(sums,element) => sums..add(element + (sums.isEmpty ? 0 : sums.last)));
void main() {
print(getCumulative([2,9,4,16,13,23,18])); // [2,11,15,31,44,67,85]
}
或者这个更具可读性:
/// Create cumulative list totals
List<int> getCumulative(List<int> list) {
var sum = 0;
return [for (final value in list) sum += value];
}
void main() {
print(getCumulative([2,85]
}