-3

我有如下列表。

列表

  • 3约翰
  • 1 史高丽
  • 4 爱德华
  • 9 金

试图用 linq 将其转换为;

列表

  • 3约翰
  • 4 史高丽
  • 8 爱德华
  • 17 金

没有for循环我怎么能做到这一点。我想用 linq 来实现这一点。

4

2 回答 2

5

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));
    }
}
于 2013-06-13T14:54:14.993 回答
1

只需使用经典的 for 循环即可。方式更简单、易于理解、可维护和高效。

LINQ 基本上不是为了根据给定列表的先前排序值更新项目而设计的。

于 2013-06-13T13:25:57.597 回答