-
두 개의 배열을 쌍으로 정렬C# 예제 공부일기 2020. 7. 20. 20:53
Array 클래스의 Sort() 메소드는 다양한 방법으로 중복되어 있습니다. 이중 두개의 배열을 쌍으로 정렬할 때 사용할 수 있는 메소드는 다음과 같다. 모두 public static void 타입의 정적 메소드이다.
Sort(Array, Array) // 앞에 있는 배열을 기준으로 두개의 배열을 오름차순 정렬한다. 정렬 기준은 첫 번째 배열의 값이고 두 번째 배열은 첫 번째 배열의 순서에 따라 결정된다.
Sort(Array, Array, IComparer) //위의 방식과 같이 정렬하지만 그 기준이 IComparer이다
Sort(Array, Array ,Int32, Int32)
Sort(Array, Array ,Int32, Int32,IComparer)
//위의 두 방식은 배열의 전체가 아니고 일부를 정렬할 때 사용한다. IComparer 인터페이스는 public int Compare() 메소드를 만들게 되어 있다.
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,animalsKo); Console.WriteLine(); Array.Sort(animalsEn, animalsKo);//알파벳을 기준으로 정렬 Display("알파벳 기준 정렬 후", animalsEn, animalsKo); Console.WriteLine(); Array.Sort(animalsKo, animalsEn);//한글을 기준으로 정렬 Display("한글 기준 정렬 후", animalsEn, animalsKo); Console.WriteLine(); IComparer revComparer = new ReverseComparer(); Array.Sort(animalsEn, animalsKo, revComparer); Display("내림차순 정렬 후", animalsEn, animalsKo); } private static void Display(String comment,string[] a1, string[] a2) { Console.WriteLine(comment); for(int i=0;i<a1.Length;i++) { Console.WriteLine(" [{0}] : {1,-8} {2,-8}", i, a1[i], a2[i]); } Console.WriteLine(); } }
앞전 예제에서 IComparer 인터페이스의 Compare 메소드를 재정의 한 부분을 그대로 사용하였다. 제일 첫 정렬은 알파벳을 기준으로 정렬을 하는데 그 인덱스 그대로 한글배열도 맞춰서 정렬이 된다. 그 다음 정렬도 마찬가지이고, 마지막 정렬은 알파벳을 기준으로 내림차순 정렬하는데 한글도 맞춰서 정렬이 된다,
'C# 예제 공부일기' 카테고리의 다른 글
Queue<T> 컬렉션의 사용 방법 (0) 2020.07.21 IComparable 인터페이스를 이용한 객체의 정렬 (0) 2020.07.21 배열을 내림차순으로 정렬하는 방법 (0) 2020.07.20 List<T>와 배열의 정렬 (0) 2020.07.20 List<T> 컬렉션 (0) 2020.07.14