我需要按照以下函数所述的方式合并两个列表。这个实现使用递归并且有效,但是似乎不太优雅。有没有人知道用LINQ更好的方法?似乎应该有像SelectMany
这样的东西可以引用外部(未扁平化)元素,但我找不到任何东西。
/// <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;
}
OuterZip
。 - tm1