Как отсортировать пользовательский класс в .net, c # - PullRequest
2 голосов
/ 05 июля 2011

У меня есть коллекция определенного пользователем объекта класса, например, экземпляры Car, каков наилучший способ сортировки.

Ниже приведены возможные способы, какой из них лучший, есть ли другие способы?

  1. IComparable
  2. Сравниватель
  3. Сравнение
  4. IEquatable

Любая идея будет очень ценится

1 Ответ

11 голосов
/ 05 июля 2011

Существует еще один важный и чрезвычайно простой способ, если только вы не требуете , что вы сортируете на месте: используйте LINQ to Objects.Например:

var orderedByName = cars.OrderBy(car => car.Name).ToList();

Вы можете заказать несколько проекций и различным образом, например:

var complex = cars.OrderByDescending(car => car.Year)
                  .ThenBy(car => car.Model)
                  .ThenByDescending(car => car.Make)
                  .ToList();

Я поставил ToList в конце толькосоздайте List<Car> в конце - если вам нужно только перебрать результаты, вы можете позволить ему выполнить заказ лениво:

var query = cars.OrderByDescending(car => car.Year)
                  .ThenBy(car => car.Model)
                  .ThenByDescending(car => car.Make);

foreach (var car in cars)
{
    // Use car
}

Лично я считаю, что это самый гибкий способ сортировки.В противном случае, использование IComparer<T> и Comparison<T> является следующим наиболее гибким, так как любой может заказать этот путь.IComparable<T> требует, чтобы сам класс решал, как элементы будут упорядочены, и вы можете реализовать его только один раз, что делает его несколько негибким.

IEquatable<T> используется для сравнения элементов на равенство, поэтому используется для таких вещей, как HashSet<T>, а не для заказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...