我有如下列表。
列表
尝试使用linq将其转换为;
列表
如果没有for循环我怎么能这样做。我想用linq实现这个目标。
答案 0 :(得分: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));
}
}
答案 1 :(得分:1)
只需使用经典的for循环即可。方式更简单,易懂,可维护和高效。
LINQ基本上不是为了根据给定列表的先前有序值更新项目而设计的。