Як я можу замовити список <string>?


121

У мене це List<string>:

IList<string> ListaServizi = new List<string>();

Як я можу замовити його в алфавітному порядку та за зростанням?




Метод сортування; у поєднанні з Реверсом, якщо вам також потрібен низхід
Натан Q

Відповіді:


238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

@Servy Однією з причин використовувати OrderBy буде те, що у ListaServizi немає методу сортування, оскільки він оголошений як IList<string>. Цей код насправді працює як написаний, на відміну від відповідей, які отримали більше оновлень ListaServizi.Sort(). Я не кажу, що це рішення, яке я обрав би, але це була насправді єдина правильна відповідь, коли я публікував свою відповідь.
фог

Якщо ви не вибрали рішення, то чому б пропонувати це як відповідь? Запропонуйте, що б ви зробили як відповідь; якщо це означає змінити тип з IList на List, щоб ви могли зателефонувати .Sortна нього, то чому б цього не зробити.
Сервіс

1
@Servy Він вирішив проблему, не змінюючи специфікації проблеми. Це, до речі, бажаний спосіб. Більше того, в постановці проблеми використовується інтерфейс над схемою реалізації, що дуже важливо. Запропонувати зміну типу List є правильним, але його слід зробити як альтернативну відповідь після правильної, оскільки це потребує зміни проблеми.
Aurelien Ribon

1
@ AurélienRibon Ніщо про твердження проблеми не говорить про те, що тип змінної неможливо змінити. Вимоги дуже конкретні для сортування List. І вартість, пов’язана з цією відповіддю, нетривіальна і також непотрібна. Він буквально нічого не отримує . Це додає коду складність, він менш стислий, менш ефективний, тут немає нічого, крім мінусів.
Сервіс


12

Інші відповіді правильні Sort, але здається, вони пропустили той факт, що місце зберігання введено як IList<string. Sortне є частиною інтерфейсу.

Якщо ви знаєте, що ListaServiziзавжди буде містити а List<string>, ви можете або змінити його оголошений тип, або скористатися командою. Якщо ви не впевнені, ви можете перевірити тип:

if (typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))
    ((List<string>)ListaServizi).Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Можливо, ідіоматичніше:

List<string> typeCheck = ListaServizi as List<string>;
if (typeCheck != null)
    typeCheck.Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Якщо ви знаєте, що ListaServiziіноді відбудеться інша реалізація IList<string>, залиште коментар, і я додам пропозицію чи дві для його сортування.


5
ListaServizi.Sort();

Зробимо це за вас. Досить просто зі списком рядків. Ви повинні бути трохи розумнішими, якщо сортуєте предмети.


3
ListaServiziє IList<string>; в інтерфейсі немає Sortметоду. Тут вам хоча б потрібен акторський склад.
фог

3
List<string> myCollection = new List<string>()
{
    "Bob", "Bob","Alex", "Abdi", "Abdi", "Bob", "Alex", "Bob","Abdi"
};

myCollection.Sort();
foreach (var name in myCollection.Distinct())
{
    Console.WriteLine(name + " " + myCollection.Count(x=> x == name));
}

вихід: Abdi 3 Alex 2 Bob 4

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.