List <string>은 어떻게 주문할 수 있습니까?


121

나는 이것을 가지고있다 List<string>:

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

알파벳순과 오름차순으로 주문하려면 어떻게해야합니까?




정렬 방법; 뒷면과 조합 U는 하강해야하는 경우
네이 Q

답변:


238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

@Servy OrderBy를 사용하는 한 가지 이유는 ListaServizi가 IList<string>. 이 코드는 실제로 더 많은 찬성 투표를받은 답변과 달리 작성된대로 작동 ListaServizi.Sort()합니다. 나는 이것이 내가 선택한 해결책이라고 말하는 것이 아니지만 실제로 내 답변을 게시했을 때 유일한 정답이었습니다.
phoog

당신이 선택한 해결책이 아니라면 왜 그것을 대답으로 제안합니까? 답으로 할 일을 제안하십시오. 그것이 당신이 .Sort그것을 호출 할 수 있도록 IList에서 List로 유형을 변경하는 것을 의미한다면 , 왜 그렇게하지 않는가.
Servy

1
@Servy 그는 문제 사양을 변경하지 않고 문제를 해결했습니다. 그것은 지금까지 선호되는 방법입니다. 또한 문제 설명은 구현 패턴에 대한 인터페이스를 사용하므로 매우 중요합니다. 목록 유형에 대한 변경을 제안하는 것은 정확하지만 문제를 변경해야하므로 올바른 답변 이후에 대체 답변으로 수행해야합니다.
Aurelien Ribon 2014-08-29

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.