使用外部优先级列表对项目进行任意排序

C0F*_*33D 2 c# linq sorting

我有一个像这样的独特物品清单:

List<Animals> ItemList = Cat, Dog, Bird, ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用外部优先级列表对它进行排序,如下所示:

List<Animals> PriorityList = Dog, Cat, Bird, ...
Run Code Online (Sandbox Code Playgroud)

我发现我可以用这种方式正确排序项目:

ItemList.OrderBy(i => i == Dog).ThenBy(i => i.Cat).ThenBy(i => i.Bird)...
Run Code Online (Sandbox Code Playgroud)

但是这种方法的可扩展性非常糟糕。有人知道如何使用LINQ和PriorityList做到这一点吗?

Ruf*_*s L 6

您可以通过其他列表中的索引对项目进行排序:

var orderedList = ItemList.OrderBy(i => PriorityList.IndexOf(i)).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如果某个项目恰好不在优先级列表中,则该项目将排在第一位,因为IndexOf它将返回-1不存在的项目。如果您希望它们排在最后,那么您可以检查列表中是否首先包含该项目,如果没有,则返回更大的数字,例如int.MaxValuePriorityList.Count

var ordered = items
    .OrderBy(i => priorities.Contains(i) ? priorities.IndexOf(i) : int.MaxValue)
    .ToList();
Run Code Online (Sandbox Code Playgroud)