[c#] 일반 목록 DESC 및 ASC를 어떻게 정렬 할 수 있습니까?

일반 목록 DESC 및 ASC를 어떻게 정렬 할 수 있습니까? LINQ가 있고 LINQ가 없습니까? VS2008을 사용하고 있습니다.

class Program
{
    static void Main(string[] args)
    {
        List<int> li = new List<int>();

        li.Add(456);
        li.Add(123);
        li.Add(12345667);
        li.Add(0);
        li.Add(1);

        li.Sort();

        foreach (int item in li)
        {
            Console.WriteLine(item.ToString() + "\n");
        }

        Console.ReadKey();
    }
}



답변

Linq와 함께

var ascendingOrder = li.OrderBy(i => i);
var descendingOrder = li.OrderByDescending(i => i);

Linq없이

li.Sort((a, b) => a.CompareTo(b)); // ascending sort
li.Sort((a, b) => b.CompareTo(a)); // descending sort

Linq가 없으면 목록 자체가 정렬됩니다. Linq를 사용하면 목록의 열거 가능한 순서가 표시되지만 목록 자체는 변경되지 않았습니다. 목록을 변경하려면 Linq 메서드를 다음과 같이 변경합니다.

li = li.OrderBy(i => i).ToList();


답변

Linq없이 :

오름차순 :

li.Sort();

내림차순 :

li.Sort();
li.Reverse();


답변

linq가 없으면 사용 Sort()하고 사용 Reverse()하십시오.


답변

위의 모든 답변을 확인하고 추가 정보를 하나 더 추가하고 싶었습니다. 나는 목록을 DESC 순서로 정렬하고 싶었고 더 큰 입력에 대해 더 빠른 솔루션을 찾고 있었고 이전 에이 방법을 사용했습니다.

li.Sort();
li.Reverse();

하지만 내 테스트 케이스는 시간 제한을 초과하여 실패했기 때문에 아래 솔루션이 저에게 효과적이었습니다.

li.Sort((a, b) => b.CompareTo(a));

따라서 궁극적으로 결론은 내림차순으로 목록을 정렬하는 두 번째 방법이 이전보다 약간 빠르다는 것입니다.


답변

내림차순으로 int 값으로 목록을 정렬하는 매우 간단한 방법 :

li.Sort((a,b)=> b-a);

이것이 도움이되기를 바랍니다!


답변