想象一下,您有一个名为List<Foo>的列表。
Foo是一个抽象类,因此可以是FooAFooBFooCFooD。我想扩展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/

10-08 20:57