@Servy Jednym z powodów użycia OrderBy byłoby to, że ListaServizi nie ma metody Sort, ponieważ jest zadeklarowana jako IList<string>. Ten kod działałby tak, jak napisano, w przeciwieństwie do odpowiedzi, które otrzymały więcej głosów za ListaServizi.Sort(). Nie mówię, że to jest rozwiązanie, które wybrałem, ale w rzeczywistości była to jedyna poprawna odpowiedź, kiedy opublikowałem swoją odpowiedź.
phoog
Jeśli nie jest to rozwiązanie, które byś wybrał, to po co proponować je jako odpowiedź? Zaproponuj, co byś zrobił jako odpowiedź; jeśli to oznacza zmianę typu z IList na List, abyś mógł go wywołać .Sort, to dlaczego tego nie zrobić.
Servy
1
@Servy Rozwiązał problem bez zmiany specyfikacji problemu. To zdecydowanie preferowany sposób. Co więcej, opis problemu używa interfejsu zamiast wzorca implementacji, co jest bardzo ważne. Zaproponowanie zmiany typu Lista jest poprawne, ale powinno być dokonane jako odpowiedź alternatywna po poprawnej, ponieważ wymaga zmiany problemu.
Aurelien Ribon
1
@ AurélienRibon Nic w opisie problemu nie mówi, że nie można zmienić typu zmiennej. Wymagania są bardzo szczegółowe, aby posortować plik List. Koszt związany z tą odpowiedzią jest nietrywialny, a także niepotrzebny. Dosłownie nic nie zyskuje . Dodaje złożoności do kodu, jest mniej zwięzły, mniej wydajny, nie ma tu dosłownie nic oprócz wad.
Inne odpowiedzi są poprawne Sort, ale wydaje się, że przeoczyły one fakt, że miejsce przechowywania jest wpisane jako IList<string. Sortnie jest częścią interfejsu.
Jeśli wiesz, że ListaServizizawsze będzie zawierał a List<string>, możesz zmienić jego zadeklarowany typ lub użyć rzutowania. Jeśli nie masz pewności, możesz przetestować typ:
if(typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))((List<string>)ListaServizi).Sort();else{//... some other solution; there are a few to choose from.}
Być może bardziej idiomatyczne:
List<string> typeCheck =ListaServiziasList<string>;if(typeCheck !=null)
typeCheck.Sort();else{//... some other solution; there are a few to choose from.}
Jeśli wiesz, że ListaServiziczasami będzie to zawierać inną implementację IList<string>, zostaw komentarz, a ja dodam sugestię lub dwie dotyczące sortowania.
ListaServizijest IList<string>; interfejs nie ma Sortmetody. Przynajmniej potrzebujesz tutaj obsady.
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 ?Odpowiedzi:
źródło
IList<string>
. Ten kod działałby tak, jak napisano, w przeciwieństwie do odpowiedzi, które otrzymały więcej głosów zaListaServizi.Sort()
. Nie mówię, że to jest rozwiązanie, które wybrałem, ale w rzeczywistości była to jedyna poprawna odpowiedź, kiedy opublikowałem swoją odpowiedź..Sort
, to dlaczego tego nie zrobić.List
. Koszt związany z tą odpowiedzią jest nietrywialny, a także niepotrzebny. Dosłownie nic nie zyskuje . Dodaje złożoności do kodu, jest mniej zwięzły, mniej wydajny, nie ma tu dosłownie nic oprócz wad.Możesz użyć Sortuj
źródło
Inne odpowiedzi są poprawne
Sort
, ale wydaje się, że przeoczyły one fakt, że miejsce przechowywania jest wpisane jakoIList<string
.Sort
nie jest częścią interfejsu.Jeśli wiesz, że
ListaServizi
zawsze będzie zawierał aList<string>
, możesz zmienić jego zadeklarowany typ lub użyć rzutowania. Jeśli nie masz pewności, możesz przetestować typ:Być może bardziej idiomatyczne:
Jeśli wiesz, że
ListaServizi
czasami będzie to zawierać inną implementacjęIList<string>
, zostaw komentarz, a ja dodam sugestię lub dwie dotyczące sortowania.źródło
Zrobię to za Ciebie. Jest to dość proste dzięki liście ciągów. Przy sortowaniu obiektów musisz być trochę sprytniejszy.
źródło
ListaServizi
jestIList<string>
; interfejs nie maSort
metody. Przynajmniej potrzebujesz tutaj obsady.wyjście: Abdi 3 Alex 2 Bob 4
źródło