이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

IStructuralComparable.CompareTo 메서드 (Object, IComparer)

 

게시 날짜: 2016년 11월

정렬 순서에서 현재 컬렉션 개체의 위치가 다른 개체보다 앞인지, 뒤인지 또는 동일한지를 확인합니다.

네임스페이스:   System.Collections
어셈블리:  mscorlib(mscorlib.dll에 있음)

int CompareTo(
	object other,
	IComparer comparer
)

매개 변수

other
Type: System.Object

현재 인스턴스와 비교할 개체입니다.

comparer
Type: System.Collections.IComparer

해당 멤버와 현재 컬렉션 개체의 멤버를 비교 하는 개체 other합니다.

반환 값

Type: System.Int32

현재 컬렉션 개체의 관계를 나타내는 정수 other, 는 다음 표에 표시 된 것 처럼입니다.

반환 값

설명

-1

현재 인스턴스 앞에 오는 other합니다.

0

현재 인스턴스 및 other 동일 합니다.

1

현재 인스턴스 other합니다.

Exception Condition
ArgumentException

이 인스턴스 및 other 는 동일한 형식이 하지 않습니다.

CompareTo 구조적 사용자 지정 비교 및 정렬 배열과 튜플 개체의 메서드를 지원 합니다. CompareTo 메서드 호출의 comparer 개체의 IComparer.Compare 첫 번째 요소 또는 구성 요소부터 시작 하는 튜플 구성 또는 개별 배열 요소를 비교 하는 메서드. 에 대 한 개별 호출이 IComparer.Compare 끝 및 CompareTo 메서드는 다음 조건 중 하나를 true 값을 반환 합니다.

다음 예제에서는 배열을 Tuple<T1, T2, T3, T4, T5, T6> 미국의 세 도시 1960에서 2000에 대 한 인구 데이터를 포함 하는 개체입니다. 6 중의 첫 번째 구성 요소는 도시 이름입니다. 나머지 다섯 개의 구성 요소부터 2000 1960에서 10 년 간격으로 인구를 나타냅니다.

PopulationComparer 클래스 제공는 IComparer 배열을 로스엔젤레스와 6의 구성 요소 중 하나를 정렬할 수 있도록 구현 합니다. 두 값을 제공는 PopulationComparer 클래스의 생성자에: 정렬 순서를 정의 하는 구성 요소의 위치 및 Boolean 튜플 개체를 오름차순 또는 내림차순으로 정렬할지 여부를 나타내는 값입니다.

예제에서는 다음 정렬 되지 않은 순서로 배열 요소를 표시, 세 번째 구성 요소 (1970의 인구)를 기준으로 정렬 표시 되며, 및 다음 여섯 번째 구성 요소 (2000에서 채우기)를 기준으로 정렬 및 표시 합니다. 예제에서는 직접 호출 하지 않는 참고는 IStructuralComparable.CompareTo 구현 합니다. 메서드가 의해 암시적으로 호출 되는 Sort(Array, IComparer) 배열의 각 튜플 개체에 대 한 메서드.

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
4.0 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
4.0 이후 사용 가능
Windows Phone Silverlight
8.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능
맨 위로 이동
표시: