这个问题类似于LINQ group one type of item但以更通用的方式处理。
我有一个包含各种派生类的列表。我可能有这样的事情:
List<BaseClass> list = new List<BaseClass>() {
new Class1(1),
new Class2(1),
new Class1(2),
new Class3(1),
new Class2(2),
new Class4(1),
new Class3(2)
};
我正在尝试使用 LINQ 对列表进行半排序,以便保持自然顺序,但某些具有 base.GroupThisType == true 的类除外。所有具有 GroupThisType 的类都应该在同一类型的第一个类出现的地方组合在一起。输出应该是这样的:
List<BaseClass> list = new List<BaseClass>() {
new Class1(1),
new Class1(2),
new Class2(1),
new Class3(1),
new Class3(2)
new Class2(2),
new Class4(1),
};
编辑:糟糕,忘了说这个结果是假设 (Class1 and Class3).GroupThisType == true
最佳答案
像这样:
list = list.Select((o, i) => new { Index = i * 10000, Value = o })
.GroupBy(q => q.GetType())
.SelectMany(g => {
if (g.First().GroupThisType)
return g.Select((q, i) =>
new { Index = g.First().Index + i, Value = q.Value }
);
else
return g;
})
.OrderBy(q => q.Index)
.Select(q => q.Value)
.ToList();
i * 10000
允许在任意两个项目之间插入一个组中最多 10,000 个项目。
您可以将 g.First().GroupThisType
替换为 typesToGroup.Contains(g.Key)
。
关于c# - LINQ - 对特定类型的类进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2835492/