Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Что лучше использовать IComparer или IComparable?

Что лучше использовать для сортировки IComparer или IComparable?Можете сказать что из них лучше использовать и почему? Лично я сам не совсем понял что из них лучше.


Ответ

В .NET классов коллекций и массивы поддерживают сортировку,с помощью одного метода, который, как правило, называется Sort().Однако метод Sort() по умолчанию работает только для наборов примитивных типов, как int или string. Для сортировки наборов сложных объектов применяется интерфейс IComparable
public interface IComparable { int CompareTo(object o); }
Метод CompareTo на выходе возвращает целое число, которое может иметь одно из трех значений:
Меньше нуля. Значит, текущий объект должен находиться перед объектом, который передается в качестве параметра Равен нулю. Значит, оба объекта равны Больше нуля. Значит, текущий объект должен находиться после объекта, передаваемого в качестве параметр
IComparable имеет обобщенную версию IComparable IComparable, если определено для T, позволяет сравнить текущий экземпляр с другим экземпляром того же типа.
IComparable сопоставим,а IComparer сравнитель.
Кроме интерфейса IComparable платформа .NET также предоставляет интерфейс IComparer
interface IComparer { int Compare(object o1, object o2); }
Метод Compare предназначен для сравнения двух объектов o1 и o2. Он также возвращает три значения, в зависимости от результата сравнения: Если первый объект больше второго,
то возвращается число больше 0 если меньше - то число меньше нуля если оба объекта равны, возвращается ноль
IComparer имеет обобщенную версию IComparer IComparer может быть полезна,когда вам требуется сортировка на основе пользовательского порядка,но не как общее правило.Например,в классе Person в какой-то момент вам может потребоваться сортировка людей в зависимости от их возраста. В этом случае вы можете
public class Person { public int Age; } public class AgeComparer : IComparer { public int Compare(Person x, Person y) { return x.Age - y.Age; } }
Обычно вам нужно IComparable.В идеале вы можете иметь только один IComparable, тогда как несколько IComparer возможны на основе разных критериев.

Комментариев нет:

Отправить комментарий