在c#Linq中反聚合列表
鉴于以下情况在c#Linq中反聚合列表,c#,linq,C#,Linq,鉴于以下情况 class MyClass { public int Id { get; set; } public int Value { get; set; } } var list = new List<MyClass>() { new MyClass { Id = 1, Value = 3 }, new MyClass { Id = 2, Value = 4 }, }; 我基本上是在重复Id,n*值 在Linq中有什么简单的方法可以做到这一点吗?您可以做到
class MyClass
{
public int Id { get; set; }
public int Value { get; set; }
}
var list = new List<MyClass>() {
new MyClass { Id = 1, Value = 3 },
new MyClass { Id = 2, Value = 4 },
};
我基本上是在重复Id,n*值
在Linq中有什么简单的方法可以做到这一点吗?您可以做到:
var array = list
.SelectMany(c => Enumerable.Range(0, c.Value).Select(i => c.Id))
.ToArray();
注:
- 对于
列表中的每个项目,生成指定范围内的整数序列-在本例中,从MyClass
开始,计数为0
。然后将范围中的每个值投影为一个常量值,即MyClass.Value
MyClass.Id
- 然后用于将可枚举的常量值展平到单个列表中
var result = list.SelectMany(x => Enumerable.Repeat(x.Id, x.Value)).ToArray();
也许吧,但输入与输出的关系究竟如何?你认为1和2是从哪里来的?@NightOwl888:看起来,它应该重复
Id
值
次。是的,它重复Id值的时间数这是我喜欢重复
更多的罕见情况之一。因为它工作(值类型)并且正是OP想要做的。“所以它更具可读性和简洁性。”蒂姆施梅尔特-是的,我想我同意。我很少使用它,以至于忘了它。但两者都很好。你能把你的邮递员给我吗?
var result = list.SelectMany(x => Enumerable.Repeat(x.Id, x.Value)).ToArray();