Справка C#: сортировка списка объектов в C# [дубликат]

s = 'nowIsTheTime'

s.split /(?=[A-Z])/

=> ["now", "Is", "The", "Time"]

?=pattern является примером позитивного взгляда. По сути, он соответствует точке в строке прямо перед шаблоном . Он не потребляет символы, то есть не включает шаблон как часть совпадения. Другой пример:

    irb> 'streets'.sub /t(?=s)/, '-'
=> "stree-s"

В этом случае s совпадает (только второй t совпадает), но не заменяется. Благодаря @Bryce и его regexp doc link. Брайс Андерсон добавляет объяснение:

?= в начале () группы совпадений называется позитивным прогнозом, , что является лишь способом сказать, что в то время как regex смотрит на символы, чтобы определить, совпадает ли он, но не делает их частью матча. split() обычно ест промежуточные символы, но в этом случае само совпадение пустое, поэтому там ничего нет.

12
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

CarList = CarList.OrderBy( x => x.CreationDate ).ToList();
42
ответ дан 2 December 2019 в 03:08
поделиться

Во-первых, используя сокращенный синтаксис, представленный в .Net 3.5, вы можете сделать это определение класса намного короче:

public class CarSpecs
{
    public CarSpecs() { }

    public String CarName { get; set;
    public String CarMaker { get; set; }
    public DateTime CreationDate { get; set; }
}

Это будет скомпилировано в тот же самый класс, что и у вас выше.

Во-вторых, вы можете легко отсортировать их с помощью лямбда-выражений или LINQ:

var linq = (from CarSpecs c in CarList
            orderby c.CreationDate ascending
            select c) as List<CarList>;

var lambda = CarList.OrderBy(c => c.CreationDate).ToList();
5
ответ дан 2 December 2019 в 03:08
поделиться

Не пишите свой собственный алгоритм сортировки. .NET имеет метод Array.Sort () специально для таких вещей, как эта.

Поскольку у вас есть настраиваемый объект, вам нужно определить, как сравнивать 2 объекта, чтобы алгоритм сортировки знал, как сортировать их. Вы можете сделать это одним из двух способов:

  1. Заставьте свой класс CarSpecs реализовать интерфейс IComparable
  2. Создайте класс, реализующий IComparer , и передайте его in в качестве параметра Array.Sort () вместе с вашим массивом.
4
ответ дан 2 December 2019 в 03:08
поделиться

В BCL уже есть алгоритмы сортировки - Array.Sort () и List.Sort (). Реализуйте класс IComparer, который определяет порядок сортировки с помощью CreationDate, затем поместите все объекты в массив или список и вызовите соответствующий метод Sort ()

0
ответ дан 2 December 2019 в 03:08
поделиться
Другие вопросы по тегам:

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