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>Спасибо.

Пока незачто. =)
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. Проект не мой, большой, не могу менять классы, надо лишь сортировку сделать.


Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.