我有一个带整数属性的类。我有一个将在图表应用程序中使用的列表。我希望将此属性显示为累计总数,同时保留所有其他类信息。
我们称这个类为ProgressMeasurement,属性为OutstandingItems。有没有一些方法,使用Aggregate函数我可以完成这个?
例如:
progressMeasurementList.Aggregate((a, b) => b.OutstandingItems += a.OutstandingItems));
即。我想将b
的OutstandingItems值更新为当前运行总计。
干杯
答案 0 :(得分:1)
内置任何内容但您可以创建自己的扩展方法:
public static IEnumerable<TAccum> Scan<T, TAccum>(this IEnumerable<T> seq, TAccum init, Func<TAccum, T, TAccum> op)
{
TAccum current = init;
foreach(T item in seq)
{
current = op(current, item);
yield return current;
}
}
然后,您可以将累计和的序列计算为:
var runningTotals = progressMeasurementList.Scan((acc, b) => acc + b.OutstandingItems));
答案 1 :(得分:1)
Linq用于查询,而非更新。对于传统循环,更新通常更简洁:
var runningTotal = 0;
foreach(var item in progressMeasurementList)
{
runningTotal += item.OutstandingItems
item.OutstandingItems = runningTotal));
}
答案 2 :(得分:0)
那将是.Sum()
方法:
var sum = progressMeasurementList.Sum(prog => prog.OutstandingItems);
答案 3 :(得分:0)
我会在foreach
中这样做。 Linq查询不应该用于更改源。
var runningTotal = progressMeasurementList.First().OutstandingItems;
foreach(var progressMeasurement in progressMeasurementList.Skip(1))
{
runningTotal += progressMeasurement.OutstandingItems;
progressMeasurement.OutstandingItems = runningTotal;
}
答案 4 :(得分:0)
也许迟到但我添加了此
的汇总变体 int total = 0;
t.Aggregate(total, (acc, current) =>
{
acc+= current.OutstandingItems;
current.CumulativeOutstandingItems = acc;
return acc;
});
注意:我不知道你想用累积金额替换OutstandingItems。为了便于阅读,我将总和放在不同的属性中。
答案 5 :(得分:0)
您可以尝试使用ForEach
方法,如下所示:
int runningTotal = 0;
progressMeasurementList.ForEach(item =>
{
runningTotal += item.OutstandingItems;
item.OutstandingItems = runningTotal;
});