CollectionBase Sorting
От: vSnake  
Дата: 12.09.06 12:50
Оценка:
Добрый день.

Был бы очень благодарен если кто-нибудь помог бы мне с проблемой сортировки. У меня есть класс унаследованный от CollectionBase. В InnerList этого класса запихиваются объекты класса В, этот список надо отсортировать по значениям в свойствах объектов. Причем сортировка должна поддерживать сортировку по нескольким свойствам. Например, "Name asc, Surname desc". Сортировку я реализовал с помощью IComparer. Все работает отлично. Но когда сортирую по полю "MiddleName" которое пустое — "". То он сортирует не правильно, почему-то переставляет объекты местами, где не надо. Я проверил метод Compare Icomparera возвращает 0, так почему же тогда происходит перестановка?
(Например, Было A B C, стало A C B)

Использую Framework 1.x.

Может можно как-то подругому отсортировать?
Вариант со скидованием в DataTable не подходит, есть Read only properties. Проект не мой, большой, не могу менять классы, надо лишь сортировку сделать.


Спасибо.
Re: CollectionBase Sorting
От: Andrew_ImP  
Дата: 12.09.06 13:51
Оценка: 6 (1)
Здравствуйте, 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>Спасибо.

Пока незачто. =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.