如何在另一个列表中的每一行之前添加一个列表?

时间:2014-02-25 19:08:14

标签: c# linq

我正在寻找一种最有效的方法,在IEnumerable<T> B中的每一行前面IEnumerable<T> A中添加所有行。

例如:

A = {A, B}
B = {1, 2, 3}

在前期之后:

B = {A, B, 1, A, B, 2, A, B, 3}

1 个答案:

答案 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将完全迭代。