我有一个像这样的独特物品清单:
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做到这一点吗?
您可以通过其他列表中的索引对项目进行排序:
var orderedList = ItemList.OrderBy(i => PriorityList.IndexOf(i)).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,如果某个项目恰好不在优先级列表中,则该项目将排在第一位,因为IndexOf它将返回-1不存在的项目。如果您希望它们排在最后,那么您可以检查列表中是否首先包含该项目,如果没有,则返回更大的数字,例如int.MaxValue或PriorityList.Count:
var ordered = items
.OrderBy(i => priorities.Contains(i) ? priorities.IndexOf(i) : int.MaxValue)
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |