-
배열을 내림차순으로 정렬하는 방법C# 예제 공부일기 2020. 7. 20. 20:26
배열을 정렬할 때는 Array.Sort() 메서드를 사용한다. Sort()메소드는 디폴트로 오름차순으로 정렬한다. 내림차순으로 정렬할 때는 Sort한 뒤에 Array.Reverse()를 사용한다.
첫 번째 방법
int[] arr = {12,32,43,24,8};
Array.Sort(arr);
Array.Reverse(arr);
두 번째 방법
public static void Sort(Array); //오름차순 정렬
public static void Sort(Array, Int32, Int32) //인덱스와 개수에 의한 정렬
public static void Sort(Array, IComparer) //IComparer의 인터페이스를 구현하여 이 규칙에 따라 정렬하는 것이다.
public class MyComparer : IComparer { public int Compare(object x, object y) { //여기에 비교 방법을 구현 } }
내림차순 정렬은 말그대로 오름차순 정렬인 Sort를 사용한후 Reverse메소드를 사용해서 뒤집어주면 된다.
밑에서 사용한 IComparer 구조체를 정의해서 Compare메소드의 연산이 x,y를 비교해서 x가 사전상의 순서가 뒤라면 앞으로보내고, 사전상의 순서가 앞이라면 뒤로보내는 메소드를 재정의했다.
return string.Compare(s2, s1);
요 부분에서 s1과 s2를 바꾸면 오름차순 정렬이 된다.
밑의 람다식은 며칠전에 배운 내용인데 번거롭게 메소드를 만들 필요 없이 바로 정의할 수 있다.
public class ReverseComparer : IComparer { public int Compare(object x, object y) { string s1 = (string)x; string s2 = (string)y; return string.Compare(s2, s1); } } public class Test { static void Main(string[] args) { string[] animalsEn = { "dog", "cow", "rabbit", "goat", "sheep", "mouse", "horse", "deer" }; string[] animalsKo = { "개", "소", "토끼", "염소", "양", "쥐", "말", "사슴" }; Display("초기배열", animalsEn); Console.WriteLine(); Console.WriteLine(); Array.Sort(animalsEn); Array.Reverse(animalsEn); Display("Sort 후 Reverse", animalsEn); Console.WriteLine(); Display("초기 배열", animalsKo); Console.WriteLine(); Array.Sort(animalsKo, 2, 3); Display("[2]에서 3개 정렬 후", animalsKo); Console.WriteLine(); IComparer revComparer = new ReverseComparer(); //Array.Sort(animalsKo, revComparer); Array.Sort(animalsKo, (x, y) => string.Compare(x.ToString(), y.ToString()) ); Display("내림차순 정렬", animalsKo); } private static void Display(String comment,string[] arr) { Console.WriteLine(comment); foreach (var item in arr) { Console.Write(item + " "); } Console.WriteLine(); }
Sort 후 Reverse 한 것이나 내림차순으로 정렬한 것이나 그게 그거다. 하지만 부분적으로 정렬해야할 필요가 있거나 특정 조건에서 정렬해야한다면 IComparer를 재정의해서 사용하는 것이 나아보인다.
'C# 예제 공부일기' 카테고리의 다른 글
IComparable 인터페이스를 이용한 객체의 정렬 (0) 2020.07.21 두 개의 배열을 쌍으로 정렬 (0) 2020.07.20 List<T>와 배열의 정렬 (0) 2020.07.20 List<T> 컬렉션 (0) 2020.07.14 컬렉션, ArrayList의 사용 (0) 2020.07.14