ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 두 개의 배열을 쌍으로 정렬
    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 메소드를 재정의 한 부분을 그대로 사용하였다. 제일 첫 정렬은 알파벳을 기준으로 정렬을 하는데 그 인덱스 그대로 한글배열도 맞춰서 정렬이 된다. 그 다음 정렬도 마찬가지이고, 마지막 정렬은 알파벳을 기준으로 내림차순 정렬하는데 한글도 맞춰서 정렬이 된다, 

     

     

Designed by Tistory.