想象一下,您有一个名为List<Foo>
的列表。Foo
是一个抽象类,因此可以是FooA
,FooB
,FooC
或FooD
。我想扩展List<T>
,在其中您可以按类型但随后按顺序订购此元素。
例如,如果我有9个元素。
FooA, FooA, FooB, FooD, FooC, FooC, FooA, FooB, FooA
随后将按类型排序。
FooA, FooB, FooC, FooD, FooA, FooB, FooC, FooA, FooA
我正在尝试按您指定的顺序对函数进行排序,在这种情况下,即IE,它是:
new[] { typeof(FooA), typeof(FooB), typeof(FooC), typeof(FooD) }
我正在尝试创建此扩展,但没有任何帮助。你能帮点忙吗?我猜想我可以用LINQ完成它。
最佳答案
您可以按类型对项目进行分组,按类型对分组进行排序,然后对分组进行交织:
var groups = items.GroupBy(x => x.GetType())
.OrderBy(g => orderedTypes.IndexOf(g.Key))
.ToList();
var result = groups.First().Interleave(groups.Skip(1).ToArray());
使用Interleave method from EvenMoreLINQ。
foreach (var item in result)
{
Console.WriteLine(item.GetType());
}
输出:
FooA
FooB
FooC
FooD
FooA
FooB
FooC
FooA
FooA
关于c# - 如何按类型订购列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12125295/