C#多次重复IEnumerable

时间:2015-02-04 08:20:45

标签: c# ienumerable

如何多次重复整个IEnumerable

与Python类似:

> print ['x', 'y'] * 3
['x', 'y', 'x', 'y', 'x', 'y']

1 个答案:

答案 0 :(得分:12)

您可以使用普通LINQ来执行此操作:

var repeated = Enumerable.Repeat(original, 3)
                         .SelectMany(x => x);

或者你可以写一个扩展方法:

public static IEnumerable<T> Repeat<T>(this IEnumerable<T> source,
                                       int count)
{
    for (int i = 0; i < count; i++)
    {
        foreach (var item in source)
        {
            yield return count;
        }
    }
}

请注意,在这两种情况下,序列都会在每个“重复”上重新评估 - 因此它可能会给出不同的结果,甚至是不同的长度......实际上,某些序列的评估不能超过一次。你需要小心你做的事情,基本上:

  • 如果您知道序列只能评估一次(或者您希望从不一致的序列获得一致的结果)但您很乐意将评估结果缓冲到内存中,则可以先调用ToList()并调用{/ 1}} {/ 1>}
  • 如果您知道可以多次一致地评估序列,只需按上述方法调用Repeat
  • 如果您处于以上两种情况,基本上没有办法多次重复序列元素