鉴于以下内容
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 },
};
我想把它变成以下数组
var list = int[] { 1,1,1,2,2,2,2 };
我基本上重复了Id,n * Value。
在Linq有没有简单的方法呢?
答案 0 :(得分:8)
答案 1 :(得分:3)
你可以这样做:
var array = list
.SelectMany(c => Enumerable.Range(0, c.Value).Select(i => c.Id))
.ToArray();
注意:
对于MyClass
列表中的每个项目,Enumerable.Range()
会在指定范围内生成一系列整数 - 在这种情况下,从0
开始并且计数为{ {1}}。然后将范围中的每个值投影到一个常数值,即MyClass.Value
。
Enumerable.SelectMany()
将可枚举的常量值展平为单个列表。
示例fiddle。