Dar*_*Zon 5 c# linq algorithm extension-methods list
想象一下,你有一个名单List<Foo>.
Foo是一个抽象类,所以这可以是FooA,FooB,FooC或FooD.而且我希望有一个扩展名List<T>,您可以按类型顺序订购这些元素.
例如,如果我有9个元素.
FooA, FooA, FooB, FooD, FooC, FooC, FooA, FooB, FooA
Run Code Online (Sandbox Code Playgroud)
按顺序排序将是.
FooA, FooB, FooC, FooD, FooA, FooB, FooC, FooA, FooA
Run Code Online (Sandbox Code Playgroud)
我正在尝试按照您指定的顺序对函数进行排序,在本例中,IE,它是:
new[] { typeof(FooA), typeof(FooB), typeof(FooC), typeof(FooD) }
Run Code Online (Sandbox Code Playgroud)
我试图创建这个扩展,但我没有得到任何东西.你能帮一下吗?我猜我可以用LINQ完成它.
您可以按类型对项目进行分组,按类型对组进行排序并交错组:
var groups = items.GroupBy(x => x.GetType())
.OrderBy(g => orderedTypes.IndexOf(g.Key))
.ToList();
var result = groups.First().Interleave(groups.Skip(1).ToArray());
Run Code Online (Sandbox Code Playgroud)
foreach (var item in result)
{
Console.WriteLine(item.GetType());
}
Run Code Online (Sandbox Code Playgroud)
输出:
FooA
FooB
FooC
FooD
FooA
FooB
FooC
FooA
FooA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |