[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на 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); } } |