插入重复值linq

在一组价值观中

[0, 2, 25, 30] 

我正在尝试使用linq

 [0, 0, 0, 2, 2, 2, 25, 25, 25, 30, 30, 30] //Replicate 2 times (values repeated 3 times) 

有没有办法用linq做到这一点?

使用值类型很容易,只需使用Enumerable.Repeat

 var result = collection.SelectMany(x => Enumerable.Repeat(x, 3)); 

如果它是一个数组使用ToArray如果它是一个列表,最后使用ToList

对于引用类型,它取决于您是否真的需要相同的引用,那么您也可以使用Repeat 。 否则,您需要创建实例的“深度克隆”,例如通过使用复制构造函数(如果可用):

 var result = collection .SelectMany(x => Enumerable.Range(1, 3).Select(i => new YourType(x))); 

蒂姆的答案当然回答了这个问题。 但是将其作为替代答案发布(如果你必须重复更少次)

 List list = new List() { 0, 1, 2, 3 }; List newList = list.SelectMany(x => new List(3) { x, x, x }).ToList();