插入重复值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();
- string.Empty和null需要多少空间?
- 如何在Visual Studio或其他构建工具中的一个C#项目中生成dll和exe的混合?
- 将简单的SelectMany转换为查询语法
- 从Service Fabric WebAPI控制器写入ServiceEventSource
- 访问IQueryable后面的DataContext
- 使用“static extern int system(string str)”时的PInvokeStackImbalance
- 使用async和await关键字的好处
- .NET的multithreading与多处理:糟糕的Parallel.ForEach性能
- 为什么我不能删除只有.DeleteObject(o)的实体?