@Servy Одна из причин использования OrderBy заключается в том, что ListaServizi не имеет метода Sort, потому что он объявлен как IList<string>. Этот код действительно будет работать так, как написано, в отличие от ответов, которые получили больше голосов ListaServizi.Sort(). Я не говорю, что это решение, которое я выберу, но на самом деле это был единственный правильный ответ, когда я опубликовал свой ответ.
phoog
Если это не то решение, которое вы бы выбрали, то зачем предлагать его в качестве ответа? Предложите, что бы вы сделали в качестве ответа; если это означает изменение типа с IList на List, чтобы вы могли его вызвать .Sort, то почему бы этого не сделать.
Servy
1
@Servy Он решил проблему, не меняя спецификацию проблемы. Это, безусловно, предпочтительный способ. Более того, в формулировке задачи используется интерфейс вместо шаблона реализации, что очень важно. Предложение изменить тип списка правильно, но должно быть сделано в качестве альтернативного ответа после правильного, потому что это требует решения проблемы.
Орелиен Рибон
1
@ AurélienRibon Ничто в формулировке проблемы не говорит о том, что тип переменной нельзя изменить. Требования очень специфичны для сортировки файла List. И стоимость, связанная с этим ответом, нетривиальна и также ненужна. Он буквально ничего не получает . Это усложняет код, он менее лаконичен, менее эффективен, здесь буквально одни минусы.
Можно предположить и другие ответы 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 =ListaServiziasList<string>;if(typeCheck !=null)
typeCheck.Sort();else{//... some other solution; there are a few to choose from.}
Если вы знаете, что ListaServiziиногда это может быть другая реализация IList<string>, оставьте комментарий, и я добавлю пару предложений по его сортировке.
ListaServiziесть IList<string>; у интерфейса нет Sortметода. По крайней мере, здесь нужен гипс.
phoog
3
List<string> myCollection =newList<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));}
.Sort
msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs.90%29.aspx ?Ответы:
источник
IList<string>
. Этот код действительно будет работать так, как написано, в отличие от ответов, которые получили больше голосовListaServizi.Sort()
. Я не говорю, что это решение, которое я выберу, но на самом деле это был единственный правильный ответ, когда я опубликовал свой ответ..Sort
, то почему бы этого не сделать.List
. И стоимость, связанная с этим ответом, нетривиальна и также ненужна. Он буквально ничего не получает . Это усложняет код, он менее лаконичен, менее эффективен, здесь буквально одни минусы.Вы можете использовать сортировку
источник
Можно предположить и другие ответы
Sort
, но они, похоже, упустили тот факт, что место хранения набрано какIList<string
.Sort
не является частью интерфейса.Если вы знаете, что
ListaServizi
он всегда будет содержатьList<string>
, вы можете либо изменить его объявленный тип, либо использовать приведение. Если вы не уверены, вы можете протестировать тип:Возможно, более идиоматично:
Если вы знаете, что
ListaServizi
иногда это может быть другая реализацияIList<string>
, оставьте комментарий, и я добавлю пару предложений по его сортировке.источник
Сделаю это за вас. Это достаточно просто со списком строк. При сортировке объектов нужно быть немного умнее.
источник
ListaServizi
естьIList<string>
; у интерфейса нетSort
метода. По крайней мере, здесь нужен гипс.вывод: Abdi 3 Alex 2 Bob 4
источник