Как я могу заказать List <string>?

122

У меня есть это List<string>:

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

Как заказать по алфавиту и по возрастанию?

markzzz
источник
4
Вы пробовали .Sort msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs.90%29.aspx ?
Мэтью
Посмотрите здесь dotnetperls.com/sort-list
Рон ван дер Хейден
Метод сортировки; в сочетании с реверсом, если вам также нужно спускаться
Nathan Q

Ответы:

239
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
Дарьял
источник
@Servy Одна из причин использования OrderBy заключается в том, что ListaServizi не имеет метода Sort, потому что он объявлен как IList<string>. Этот код действительно будет работать так, как написано, в отличие от ответов, которые получили больше голосов ListaServizi.Sort(). Я не говорю, что это решение, которое я выберу, но на самом деле это был единственный правильный ответ, когда я опубликовал свой ответ.
phoog
Если это не то решение, которое вы бы выбрали, то зачем предлагать его в качестве ответа? Предложите, что бы вы сделали в качестве ответа; если это означает изменение типа с IList на List, чтобы вы могли его вызвать .Sort, то почему бы этого не сделать.
Servy
1
@Servy Он решил проблему, не меняя спецификацию проблемы. Это, безусловно, предпочтительный способ. Более того, в формулировке задачи используется интерфейс вместо шаблона реализации, что очень важно. Предложение изменить тип списка правильно, но должно быть сделано в качестве альтернативного ответа после правильного, потому что это требует решения проблемы.
Орелиен Рибон
1
@ AurélienRibon Ничто в формулировке проблемы не говорит о том, что тип переменной нельзя изменить. Требования очень специфичны для сортировки файла List. И стоимость, связанная с этим ответом, нетривиальна и также ненужна. Он буквально ничего не получает . Это усложняет код, он менее лаконичен, менее эффективен, здесь буквально одни минусы.
Servy
45

Вы можете использовать сортировку

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();
Ричард Далтон
источник
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>, оставьте комментарий, и я добавлю пару предложений по его сортировке.

phoog
источник
5
ListaServizi.Sort();

Сделаю это за вас. Это достаточно просто со списком строк. При сортировке объектов нужно быть немного умнее.

Ste
источник
3
ListaServiziесть IList<string>; у интерфейса нет Sortметода. По крайней мере, здесь нужен гипс.
phoog
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

Абди
источник