我有如下列表。
列表
- 3约翰
- 1 史高丽
- 4 爱德华
- 9 金
试图用 linq 将其转换为;
列表
- 3约翰
- 4 史高丽
- 8 爱德华
- 17 金
没有for循环我怎么能做到这一点。我想用 linq 来实现这一点。
LINQ 中还没有一种方法可以做到这一点。你将不得不自己写。尝试这样的事情:
using System;
using System.Collections.Generic;
static class MyExtensions
{
public static IEnumerable<TResult> AggregatingSelect<TItem, TAggregate, TResult>(
this IEnumerable<TItem> items,
Func<TItem, TAggregate, TAggregate> aggregator,
TAggregate initial,
Func<TItem, TAggregate, TResult> projection)
{
TAggregate aggregate = initial;
foreach (TItem item in items)
{
aggregate = aggregator(item, aggregate);
yield return projection(item, aggregate);
}
}
}
class Program
{
static void Main(string[] args)
{
var numbers = new[] { 3, 1, 4, 9 };
var result = numbers.AggregatingSelect(
(int item, int agg) => item + agg,
0,
(int item, int agg) => agg);
Console.WriteLine(string.Join(",", result));
}
}
只需使用经典的 for 循环即可。方式更简单、易于理解、可维护和高效。
LINQ 基本上不是为了根据给定列表的先前排序值更新项目而设计的。