插入重复值linq

时间:2018-06-04 10:03:26

标签: c# 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做到这一点?

2 个答案:

答案 0 :(得分:12)

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

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

如果是数组,请使用ToArray如果是列表,请在结尾处使用ToList

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

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

答案 1 :(得分:2)

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

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