我的 C# 程序允许用户按优先级对项目进行数字排名。我编写了一个例程,当用户修改项目的等级时,它会自动按等级对项目进行排序。因此,当优先级为 3 的项目更改为 1 时,例行程序会使用前 3 个项目。之前排名 1、2 的项目将变为 2、3。同样,当优先级 1 的项目变为优先级 3 时,排名 2、3 的项目将变为 1、2。
现有的集合类是否内置了此功能?如果是这样,也将不胜感激代码示例。
请您参考如下方法:
C# 有一个 SortedSet<T>可以自定义排序的集合 IComparer<T>由用户提供。
但是,集合不会对已经在集合中的项目的更改使用react,即如果您更改已经在集合中的项目的优先级,它不会被移动自动向上或向下。
您需要从 SortedSet<T> 中删除项目,更改其优先级,然后再将其添加回来。这样集合将把它放在新的地方,移动其他项目以适应顺序的变化:
SortedSet<Project> prioritizedProjects = new SortedSet<Project>(new CompareProjByPriority());
...
Project rePrioritize = ...;
prioritizedProjects.Remove(rePrioritize);
rePrioritize.Priority = 1;
prioritizedProjects.Add(rePrioritize);
