[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Отсортировать список List<T> можно используя методы расширения, метод Sort передавая в него делегат или же реализовывая интерфейсы IComparable и IComparer.
Для примера, возьмем класс User и создадим коллекцию List<User>:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Programm { static void Main() { List<User> users = new List<User>() { new User{ Name = "Tom", Age = 21}, new User{ Name = "Bob", Age = 13}, new User{ Name = "Marry", Age = 27}, new User{ Name = "Anna", Age = 43}, new User{ Name = "Jack", Age = 19} }; } } class User { public string Name { get; set; } public int Age { get; set; } } |
Первый вариант заключается в использовании метода расширения Linq — OrderBy:
1 2 3 4 |
//По возрастанию users = users.OrderBy(e => e.Age).ToList(); //По убыванию users = users.OrderByDescending(e => e.Age).ToList(); |
Если вам необходимо отсортировать список на месте, вы можете использовать метод Sort, передавая делегат Comparison<T>:
1 |
users.Sort((e, x) => e.Age.CompareTo(x.Age)); |
Так же, можно реализовать IComparable, что бы при повторной сортировке не реализовывать каждый раз делегат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class Programm { static void Main() { List<User> users = new List<User>() { new User{ Name = "Tom", Age = 21}, new User{ Name = "Bob", Age = 13}, new User{ Name = "Marry", Age = 27}, new User{ Name = "Anna", Age = 43}, new User{ Name = "Jack", Age = 19} }; users.Sort(); } } class User : IComparable<User> { public string Name { get; set; } public int Age { get; set; } public int CompareTo(User? other) { return other.Age.CompareTo(Age); } } |
Если прямого доступа к классу нет, можно воспользоваться интерфейсом IComparer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class Programm { static void Main() { List<User> users = new List<User>() { new User{ Name = "Tom", Age = 21}, new User{ Name = "Bob", Age = 13}, new User{ Name = "Marry", Age = 27}, new User{ Name = "Anna", Age = 43}, new User{ Name = "Jack", Age = 19} }; users.Sort(new UserComparer()); } } class User { public string Name { get; set; } public int Age { get; set; } } class UserComparer : IComparer<User> { public int Compare(User? x, User? y) { return x.Age.CompareTo(y.Age); } } |