如何为排序过程提供比较和赋值运算符



我必须使用这种结构的数组

internal sealed class Task
{
    ...
    public String Id { get; private set; }
    public String Name { get; private set; }
    public UInt32 Time { get; private set; }
}
...
    private List<Task> _tasks;
    private List<Boolean[]> _tasksAllowedProcessingUnits;

这些数组具有一对一的对应关系。我需要对数组_tasks进行排序,但在交换数组_tasks中的元素时,我也需要交换_tasksAllowedProcessingUnits中的元素。因此,必须保留一对一的对应关系。

出于某些性能原因,我不想将所有与任务相关的数据放在一个结构中,以将其存储在单个数组中。

没有预先做任何事情。显然有各种解决方案

A) 你找到了QuickSort实现的来源,然后用代码"手动"进行排序+排序

B) 您可以创建一个引用TaskBoolean[]的overobject,并对它们的集合进行排序。

List<Tuple<Task, Boolean[]>> lst = Enumerable.Range(0, _tasks.Count).Select(ix => Tuple.Create(_tasks[ix], _tasksAllowedProcessingUnits[ix])).ToList();
lst.Sort((p, q) => p.Item1.CompareTo(q.Item1));
for (int i = 0; i < _tasks.Count; i++) {
    _tasks[i] = lst[i].Item1;
    _tasksAllowedProcessingUnits[i] = lst[i].Item2
}

(注意,.NET Task对象是不可比较的,所以我希望您有一个专门的比较器)

最新更新