使用LINQ,我们可以通过Aggregate
在列表上执行left fold:
var numbers = new[] { 1, 2, 3, 4 };
var value = numbers.Aggregate((a, b) => a - b); // ((1 - 2) - 3) - 4 == -8
是否有使用LINQ进行正确折叠的类似方法?
var value = numbers.Aggregate(???); // 1 - (2 - (3 - 4)) == -2
最佳答案
右折叠实质上是从右到左折叠。我们可以复制右折,如果首先可枚举,则可以通过Reverse
进行左折:var value = numbers.Reverse().Aggregate((a, b) => a - b);
作为扩展方法:public static TSource RightFold<TSource>(this IEnumerable<TSource> source,
Func<TSource, TSource, TSource> func)
{
return source.Reverse().Aggregate(func);
}
用法:var value = numbers.RightFold((a, b) => a - b); // ((4 - 3) - 2) - 1 == -2
// 1 - (2 - (3 - 4)) == ((4 - 3) - 2) - 1
关于c# - 如何使用LINQ对折?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44953821/