Был бы очень благодарен если кто-нибудь помог бы мне с проблемой сортировки. У меня есть класс унаследованный от CollectionBase. В InnerList этого класса запихиваются объекты класса В, этот список надо отсортировать по значениям в свойствах объектов. Причем сортировка должна поддерживать сортировку по нескольким свойствам. Например, "Name asc, Surname desc". Сортировку я реализовал с помощью IComparer. Все работает отлично. Но когда сортирую по полю "MiddleName" которое пустое — "". То он сортирует не правильно, почему-то переставляет объекты местами, где не надо. Я проверил метод Compare Icomparera возвращает 0, так почему же тогда происходит перестановка?
(Например, Было A B C, стало A C B)
Использую Framework 1.x.
Может можно как-то подругому отсортировать?
Вариант со скидованием в DataTable не подходит, есть Read only properties. Проект не мой, большой, не могу менять классы, надо лишь сортировку сделать.
Здравствуйте, vSnake, Вы писали:
S>Добрый день.
... S>Я проверил метод Compare Icomparera возвращает 0, так почему же тогда происходит перестановка?
Ты пользуешься Unstable sort, поэтому и происходит перестановка. В часности Array.Sort использует такую (QSort).
В примечании в мсдн'е по этому поводу написано:
This implementation performs an unstable sort; that is, if two elements are equal, their order might not be preserved. In contrast, a stable sort preserves the order of elements that are equal.
S>Может можно как-то подругому отсортировать?
Можно. Например реализовать свою "stable" сортировку. В твоем же случае проще все же упорядочить элементы с одинаковыми ключами сортировки по приоритетам в зависимости от их изначального положения и не возвращать 0.
S>Спасибо.
Пока незачто. =)