在一组价值观中
[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做到这一点?
答案 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();