Не поймите, почему люди делают это настолько сложным:
objs.sort(function(a, b){
return a.last_nom > b.last_nom;
});
Для более строгих движков:
objs.sort(function(a, b){
return a.last_nom == b.last_nom ? 0 : +(a.last_nom > b.last_nom) || -1;
});
Смените оператор, чтобы он отсортировался по обратному алфавитному порядку.
Хорошо они не вполне , то же самое как IComparer<T>
реализовано на типе, который способен к сравнению двух различных объектов, в то время как IComparable<T>
реализован на типах, которые могут сравнить себя с другими экземплярами того же типа.
я склонен использовать IComparable<T>
в течение многих времен, когда я должен знать, как другой экземпляр касается this
экземпляр. IComparer<T>
полезно для сортировки наборов, поскольку эти IComparer<T>
стоит за пределами сравнения.
Как другие сказали, они не делают того же самого.
В любом случае, в эти дни я склонен не использовать IComparer. Почему был бы я? Его ответственность (внешний объект, используемый для сравнения двух объектов), может быть обработана намного более чистая с лямбда-выражением, подобным тому, как работает большинство методов LINQ. Запишите быструю лямбду, которая берет объекты выдержать сравнение как аргументы и возвращает bool. И если объект определяет свое собственное внутреннее, сравнивают операцию, он может реализовать IComparable вместо этого.
Используйте IComparable<T>
, когда класс будет иметь внутреннее сравнение.
Использование IComparer<T>
, когда Вы хотите метод сравнения кроме внутреннего сравнения класса, если это имеет тот.
IComparable говорит, что объект может быть по сравнению с другим. IComparer является объектом, который может сравнить любые два объекта.