C#/배열

[C#]배열 정렬 방법(Sort, OrderBy)

DevStory 2021. 10. 4.

이번 포스팅에서는 C#에서 배열을 정렬하는 방법을 설명합니다.

 

1차원 배열을 정렬하는 방법으로는 Array.Sort() 메서드와 LINQ를 사용할 수 있습니다.

 


Array.Sort() 메서드

Array.Sort() 메서드를 사용하면 배열을 오름차순으로 정렬합니다.

 

내림차순으로 정렬하는 메서드는 없으므로 배열을 내림차순으로 정렬하고 싶은 경우 Sort() 메서드 호출 후 Reverse() 메서드를 사용합니다.

 

다음은 int형 배열을 Sort() 메서드를 사용하여 오름차순 정렬 후 Reverse() 메서드를 사용하여 내림차순 정렬하는 코드입니다.

int[] intArray = { 7, 3, 4, 1, 6, 5, 2 };
Console.WriteLine($"정렬 전 : {String.Join(", ", intArray)}");

Array.Sort(intArray);
Console.WriteLine($"오름차순 : {String.Join(", ", intArray)}");

Array.Reverse(intArray);
Console.WriteLine($"내림차순 : {String.Join(", ", intArray)}");

실행 결과

이러한 Sort() 메서드는 오버로딩된 다양한 형식이 존재합니다.

 

다음 코드는 Sort() 메서드에 인수 3개(배열, 시작 인덱스, 길이)를 전달하는 경우입니다.

int[] intArray = { 7, 3, 4, 1, 6, 5, 2 };
Console.WriteLine($"정렬 전 : {String.Join(", ", intArray)}");

Array.Sort(intArray, 1, 5);
Console.WriteLine($"Sort() 오버로딩 : {String.Join(", ", intArray)}");

실행 결과

1번째 위치(인덱스)부터 5개의 요소만 정렬됩니다.

Sort() 메서드의 단점으로는 기존 배열의 정렬 순서를 변경하므로 원래 순서가 보존되지 않습니다.


LINQ 사용 1. 쿼리 작업

LINQ를 사용하는 첫 번째 방법으로 쿼리 작업이 있습니다.

 

LINQ의 쿼리 작업을 사용하는 경우 기존 배열은 변경되지 않고 보존된다는 장점이 존재하지만, 익명 형식을 반환하므로 타입이 정확하게 일치하지 않는 문제가 발생합니다.

 

다음은 LINQ의 쿼리 작업을 사용하여 오름차순으로 정렬하는 코드입니다.

int[] intArray = { 7, 3, 4, 1, 6, 5, 2 };
Console.WriteLine($"정렬 전 : {String.Join(", ", intArray)}");

var sortArray = from n in intArray orderby n select n;
Console.WriteLine($"LINQ 쿼리 작업 : {String.Join(", ", sortArray)}");
Console.WriteLine($"기존 배열 : {String.Join(", ", intArray)}");

실행 결과

 

내림차순으로 정렬하고 싶은 경우 orderby 다음에 descending 키워드를 추가합니다.

var sortArray = from n in intArray orderby n descending select n;

LINQ 사용 2. OrderBy() 메서드

LINQ에서 제공하는 OrderBy() 메서드를 사용하여 배열을 정렬할 수 있습니다.

 

쿼리 작업은 반환 타입이 익명 형식이었지만, OrderBy() 메서드 호출 후 ToArray() 메서드를 호출하여 배열 타입으로 반환할 수 있습니다.

 

그리고 기존 배열이 변경되지 않고 보존된다는 장점이 있습니다.

 

다음 코드는 OrderBy() 메서드를 호출한 코드입니다.

int[] intArray = { 7, 3, 4, 1, 6, 5, 2 };
Console.WriteLine($"정렬 전 : {String.Join(", ", intArray)}");

int[] sortArray = sortArray = intArray.OrderBy(n => n).ToArray();
Console.WriteLine($"LINQ OrderBy() : {String.Join(", ", sortArray)}");
Console.WriteLine($"기존 배열 : {String.Join(", ", intArray)}");

실행 결과

 

내림차순으로 정렬하고 싶은 경우 OrderByDescending() 메서드를 호출합니다.

int[] sortArray = sortArray = intArray.OrderByDescending(n => n).ToArray();
반응형

댓글