Як я можу замовити список <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.