我正在寻找一种最有效的方法,在IEnumerable<T>
B中的每一行前面IEnumerable<T>
A中添加所有行。
例如:
A = {A, B}
B = {1, 2, 3}
在前期之后:
B = {A, B, 1, A, B, 2, A, B, 3}
答案 0 :(得分:3)
你可以创建一个像这样的方法,
public void IEnumerable<T> PrependBeforeRow<T>(
IEnumerable<T> A,
IEnumerable<T> B)
{
foreach (var b in B)
{
foreach (var a in A)
{
yield return a; // <-- first iterate over A and return all items
}
yield return b; // <-- the yield the current item from B
}
}
这可能是最简单的方法,同时保持IEnumerable<T>
的“延迟执行”方面。
您可能会使用Select
/ SelectMany
并使其更简洁,
public void IEnumerable<T> PrependBeforeRow<T>(
IEnumerable<T> A,
IEnumerable<T> B)
{
return B.Select(b => new List<T>(A) { b }).SelectMany(ab => ab);
}
唯一的问题是,每当新的A
项产生时,B
将完全迭代。