C # Пользовательская сортировка по перечислению или списку

#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(). Затем вы можете использовать метод сортировки списка.