#c# #asp.net #sorting
#c# #asp.net #сортировка
Вопрос:
Мне нужно создать класс сортировки для списка.
Я хотел бы, чтобы правило сортировки или приоритет были:
SFC = 1 SSG = 2 SGT = 3 CPL = 4 SPC = 5 И Т.Д…
Поэтому, когда я сортирую, я получу их в правильном порядке сначала по рангу, а затем по фамилии.
List<Person> person = new List<Person>();
person.Rank
person.LastName
person.FirstName
И т.д…
Пожалуйста, приведите меня к статье или инструкции. Спасибо
Комментарии:
1. Это перечисление
SFC = 1 SSG = 2 SGT = 3 CPL = 4 SPC = 5 ETC...
?2. Не уверен, что это что-то изменит, но я заполняю person. Ранг из источника данных, поэтому это строковый тип, должен был упомянуть об этом, извините
Ответ №1:
Не могли бы вы использовать LINQ?
person.OrderBy(p => p.Rank).ThenBy(p => p.LastName)
или с использованием синтаксиса запроса с предложением orderby:
from p in person
orderby p.Rank, p.LastName
select p
Ответ №2:
общедоступный рейтинг перечисления { SFC = 1, SSG, SGT } публичный класс Person { общедоступный ранг Rank { получить; установить; } имя общедоступной строки { get; set; } } статическая пустота Main(строка[] аргументов) { var persons = новый список<Персона> { новый человек { Имя = "Аааа", Ранг = Rank.SFC }, новый пользователь { Имя = "Bbbb", Ранг = Rank.SFC }, новый человек { Имя = "Аааа", ранг = Rank.SSG } }; foreach (переменная person в лицах.OrderBy(p => p.Rank).Затем с помощью (p => p.Name )) { Консоль.Строка записи("{0} {1}", человек.Ранг, person.Name ); } }
Вывод:
SFC Aaaa SFC Bbbb SSG Aaaa
Ответ №3:
var ordered = person.OrderBy(p => p.Rank)
.ThenBy(p => p.LastName)
.ThenBy(p => p.FirstName);
Обратите внимание, что это НЕ изменяет person
. Это просто создает итератор, который при повторении выдает результаты person
, возвращаемые в указанном порядке. Если вы хотите изменить список, вам придется использовать немного другой подход (обратите внимание, что этого недостаточно сказать, person = ordered.ToList();
поскольку это фактически создает новый экземпляр List<Person>
.
Ответ №4:
использование linq
var list = from xx in person
order by xx.Rank, xx.LastName
select xx
он будет сортировать по рангу и фамилии
Ответ №5:
попробуйте это….
var result = from m in person
orderby m.Rank, m.LastName
select m;
или вы можете попробовать это….
var result = person.OrderBy(m=> m.Rank)
.ThenBy(m => m.LastName)
.ThenBy(m => m.FirstName);
Ответ №6:
Ваш класс Person должен наследоваться от интерфейса Icomparable. Для этого вам придется реализовать метод compareto(). Затем вы можете использовать метод сортировки списка.