我需要以特定方式合并两个列表,如下面的函数所述。这个实现使用递归并且可以工作,但看起来很笨拙。有谁知道使用 LINQ 执行此操作的更好方法,似乎应该有类似 aSelectMany
可以引用外部(未展平)元素但我找不到任何东西
/// <summary>
/// Function merges two list by combining members in order with combiningFunction
/// For example (1,1,1,1,1,1,1) with
/// (2,2,2,2) and a function that simply adds
/// will produce (3,3,3,3,1,1,1)
/// </summary>
public static IEnumerable<T> MergeList<T>(this IEnumerable<T> first,
IEnumerable<T> second,
Func<T, T, T> combiningFunction)
{
if (!first.Any())
return second;
if (!second.Any())
return first;
var result = new List<T> {combiningFunction(first.First(), second.First())};
result.AddRange(MergeList<T>(first.Skip(1), second.Skip(1), combiningFunction));
return result;
}