Сортировка Списка объектов в C#

Я предлагаю

никогда не возвращать NULL, если записанный тип является массивом или коллекцией. Вместо этого верните пустую коллекцию или пустой массив.

Когда тип возвращаемого значения является объектом, вы можете вернуть значение null в зависимости от сценария. Но никогда не глотайте исключение и возвращайте NULL.

Также, если вы возвращаете NULL в любом сценарии, убедитесь, что это задокументировано в методе.

37
задан bluish 20 December 2013 в 10:59
поделиться

8 ответов

Наилучший подход - реализовать либо IComparable , либо IComparable , а затем вызвать List .Sort () . Это сделает за вас всю тяжелую работу по сортировке.

17
ответ дан 27 November 2019 в 03:58
поделиться

Вы можете использовать LINQ:

listOfCars.OrderBy(x => x.CreationDate);

РЕДАКТИРОВАТЬ: при таком подходе легко добавить дополнительные столбцы сортировки:

listOfCars.OrderBy(x => x.CreationDate).ThenBy(x => x.Make).ThenBy(x => x.Whatever);
58
ответ дан 27 November 2019 в 03:58
поделиться

Класс List делает это тривиальным для вас, поскольку он содержит метод Sort . (Он использует алгоритм QuickSort, а не пузырьковую сортировку, которая обычно лучше в любом случае.) Еще лучше, у него есть перегрузка, которая принимает аргумент Comparison , Это означает, что вы можете передать лямбда-выражение и сделать вещи действительно очень простыми.

Попробуйте следующее:

CarList.Sort((x, y) => DateTime.Compare(x.CreationDate, y.CreationDate));
86
ответ дан 27 November 2019 в 03:58
поделиться

Я бы просто использовал сборку в методе List.Sort. Он использует алгоритм QuickSort, который в среднем выполняется за O (n log n).

Этот код должен работать для вас, я изменяю ваши свойства на автоматические свойства и определяю статический метод CompareCarSpecs, который просто использует уже существующий DateTime. CompareTo метод.

class Program
{
    static void Main(string[] args)
    {
        List<CarSpecs> cars = new List<CarSpecs>();
        cars.Sort(CarSpecs.CompareCarSpecs);
    }
}

public class CarSpecs
{
    public string CarName { get; set; }
    public string CarMaker { get; set; }
    public DateTime CreationDate { get; set; }

    public static int CompareCarSpecs(CarSpecs x, CarSpecs y)
    {
        return x.CreationDate.CompareTo(y.CreationDate);
    }
}

Надеюсь, это поможет.

6
ответ дан 27 November 2019 в 03:58
поделиться

Другой вариант - использовать настраиваемый компаратор:

using System;
using System.Collections.Generic;
using System.Text;

namespace Yournamespace
{
   class CarNameComparer : IComparer<Car>
   {
      #region IComparer<Car> Members

      public int Compare(Car car1, Car car2)
      {
         int returnValue = 1;
         if (car1 != null && car2 == null)
         {
            returnValue = 0;
         }
         else if (car1 == null && car2 != null)
         {
            returnValue = 0;
         }
         else if (car1 != null && car2 != null)
         {
            if (car1.CreationDate.Equals(car2.CreationDate))
            {
               returnValue = car1.Name.CompareTo(car2.Name);
            }
            else
            {
               returnValue = car2.CreationDate.CompareTo(car1.CreationDate);
            }
         }
         return returnValue;
      }

      #endregion
   }
}

, который вы вызываете следующим образом:

yourCarlist.Sort(new CarNameComparer());

Примечание: я не компилировал этот код, поэтому вам, возможно, придется удалить опечатку

Edit: изменено, чтобы средство сравнения сравнивало по дате создания, как запрошено.

14
ответ дан 27 November 2019 в 03:58
поделиться

Если вам нужен эффективный способ сортировки, я бы посоветовал не использовать пузырьковую сортировку и вместо этого использовать быструю сортировку. Эта страница дает довольно хорошее объяснение алгоритма:

http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=574

Удачи!

1
ответ дан 27 November 2019 в 03:58
поделиться

Если вы используете 2.0, следующее обсуждение может быть полезно: C # List <> Сортировать по x, затем y

1
ответ дан 27 November 2019 в 03:58
поделиться

Я бы не стал писать свой собственный алгоритм сортировки, но, если вы все равно собираетесь, посмотрите http://www.sorting-algorithms.com/ для некоторые сравнения различных алгоритмов сортировки ...

1
ответ дан 27 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: