Сортировка списка List с классами по алфавиту
Есть к примеру список в котором хранятся обьекты класса , как сделать так чтобы отсортировать список в алфавитном порядке по фамилии Surname?
List<Worker> workers = new List<Worker>();
workers.Add(new Worker { Name = "Donald", Surname = "Trump" , Vacancy = "Dev", Joined = 2015 });
workers.Add(new Worker { Name = "Barak", Surname = "Obama" , Vacancy = "HR", Joined = 2011 });
workers.Add(new Worker { Name = "Joe", Surname = "Biden" , Vacancy = "Team lead", Joined = 2020 });
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
У вас есть 2 основные опции:
IEnumerable<T>.OrderBy(..)List<T>.Sort(..)
Допустим, Worker - это запись. У вас это может быть класс, не важно, я взял запись только ради удобного вывода в консоль.
record Worker
{
public string Name { get; set; }
public string Surname { get; set; }
public string Vacancy { get; set; }
public int Joined { get; set; }
}
Тогда Linq будет выглядеть так
foreach (Worker worker in workers.OrderBy(w => w.Surname))
{
Console.WriteLine(worker);
}
А List.Sort будет выглядеть так
workers.Sort((left, right) => left.Surname.CompareTo(right.Surname));
foreach (Worker worker in workers)
{
Console.WriteLine(worker);
}
Вывод в консоль одинаковый
Worker { Name = Joe, Surname = Biden, Vacancy = Team lead, Joined = 2020 }
Worker { Name = Barak, Surname = Obama, Vacancy = HR, Joined = 2011 }
Worker { Name = Donald, Surname = Trump, Vacancy = Dev, Joined = 2015 }
Но механика работы разная. В первом случае вы сортируете только вывод в консоль, а список остается неизменным, а во втором случае сортируется именно сам список.