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


122

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

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

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




Метод сортировки; в сочетании с реверсом, если вам также нужно спускаться
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


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метода. По крайней мере, здесь нужен гипс.
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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.