C# 多次重复 IEnumerable

C# repeating IEnumerable multiple times

如何多次重复整个IEnumerable

类似于Python:

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

您可以使用普通 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;
        }
    }
}

请注意,在这两种情况下,序列都会在每个 "repeat" 上重新评估 - 因此它可能会给出不同的结果,甚至是不同的长度......确实,有些序列无法评估不止一次。你需要小心你用什么做这件事,基本上:

  • 如果您知道序列只能被评估一次(或者您希望从不一致的序列中获得一致的结果)但您乐于将评估结果缓冲在内存中,您可以先调用 ToList()并在
  • 上调用 Repeat
  • 如果你知道这个序列可以多次求值,只要像上面那样调用Repeat
  • 如果以上两种情况你都没有,根本就没有办法多次重复序列元素