@Servy, um motivo para usar OrderBy seria que ListaServizi não tem um método Sort porque é declarado como IList<string>. Este código funcionaria como escrito, ao contrário das respostas que receberam mais votos positivos com ListaServizi.Sort(). Não estou dizendo que essa é a solução que eu escolheria, mas essa foi, na verdade, a única resposta correta quando postei minha resposta.
phoog de
Se não é a solução que você escolheria, por que propô-la como uma resposta? Proponha o que você faria como resposta; se isso significa alterar o tipo de IList para List para que você possa chamá .Sort-lo, por que não fazer isso.
Servy de
1
@Servy Ele resolveu o problema sem alterar a especificação do problema. Essa é a forma preferida, de longe. Além disso, a declaração do problema usa a interface em vez do padrão de implementação, o que é muito importante. Propor a mudança para o tipo Lista é correto, mas deve ser feito como uma resposta alternativa, após a correta, pois requer a mudança do problema.
Aurelien Ribon de
1
@AurélienRibon Nada sobre a definição do problema diz que o tipo da variável não pode ser alterado. Os requisitos são muito específicos para classificar a List. E o custo associado a essa resposta não é trivial e também desnecessário. Literalmente não ganha nada . Ele adiciona complexidade ao código, é menos conciso, é menos eficiente, não há literalmente nada além de desvantagens aqui.
Outras respostas estão corretas para sugerir Sort, mas parecem não perceber o fato de que o local de armazenamento é digitado como IList<string. Sortnão faz parte da interface.
Se você sabe que ListaServizisempre conterá um List<string>, poderá alterar seu tipo declarado ou usar uma conversão. Se não tiver certeza, você pode testar o tipo:
if(typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))((List<string>)ListaServizi).Sort();else{//... some other solution; there are a few to choose from.}
Talvez mais idiomático:
List<string> typeCheck =ListaServiziasList<string>;if(typeCheck !=null)
typeCheck.Sort();else{//... some other solution; there are a few to choose from.}
Se você sabe que ListaServiziàs vezes terá uma implementação diferente de IList<string>, deixe um comentário e adicionarei uma sugestão ou duas para classificá-la.
ListaServizié IList<string>; a interface não tem Sortmétodo. Você pelo menos precisa de um gesso aqui.
phoog de
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 ?Respostas:
fonte
IList<string>
. Este código funcionaria como escrito, ao contrário das respostas que receberam mais votos positivos comListaServizi.Sort()
. Não estou dizendo que essa é a solução que eu escolheria, mas essa foi, na verdade, a única resposta correta quando postei minha resposta..Sort
-lo, por que não fazer isso.List
. E o custo associado a essa resposta não é trivial e também desnecessário. Literalmente não ganha nada . Ele adiciona complexidade ao código, é menos conciso, é menos eficiente, não há literalmente nada além de desvantagens aqui.Você pode usar Classificar
fonte
Outras respostas estão corretas para sugerir
Sort
, mas parecem não perceber o fato de que o local de armazenamento é digitado comoIList<string
.Sort
não faz parte da interface.Se você sabe que
ListaServizi
sempre conterá umList<string>
, poderá alterar seu tipo declarado ou usar uma conversão. Se não tiver certeza, você pode testar o tipo:Talvez mais idiomático:
Se você sabe que
ListaServizi
às vezes terá uma implementação diferente deIList<string>
, deixe um comentário e adicionarei uma sugestão ou duas para classificá-la.fonte
Farei isso por você. É bastante simples com uma lista de strings. Você precisa ser um pouco mais inteligente ao classificar objetos.
fonte
ListaServizi
éIList<string>
; a interface não temSort
método. Você pelo menos precisa de um gesso aqui.saída: Abdi 3 Alex 2 Bob 4
fonte