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

Array.Sort<TKey, TValue> 메서드 (TKey[], TValue[], Int32, Int32, IComparer<TKey>)

지정한 IComparer<T> 제네릭 인터페이스를 사용하여 첫 번째 Array에 있는 키를 기반으로 하는 한 쌍의 Array 개체(키를 포함하는 개체와 해당 항목을 포함하는 개체)의 요소 범위를 정렬합니다.

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

[SecuritySafeCriticalAttribute]
public static void Sort<TKey, TValue>(
	TKey[] keys,
	TValue[] items,
	int index,
	int length,
	IComparer<TKey> comparer
)

형식 매개 변수

TKey

키 배열 요소의 형식입니다.

TValue

항목 배열 요소의 형식입니다.

매개 변수

keys
형식: TKey[]
정렬할 키를 포함하는 1차원 Array(인덱스는 0부터 시작)입니다.
items
형식: TValue[]
keys의 키에 해당하는 항목을 포함하는 1차원 Array(인덱스는 0부터 시작)이거나 keys만 정렬할 경우 null입니다.
index
형식: System.Int32
정렬할 범위의 시작 인덱스입니다.
length
형식: System.Int32
정렬할 범위에 있는 요소 수입니다.
comparer
형식: System.Collections.Generic.IComparer<TKey>
요소를 비교할 때 사용할 IComparer<T> 제네릭 인터페이스 구현이거나 각 요소의 IComparable<T> 제네릭 인터페이스 구현을 사용할 경우 null입니다.

예외상황
ArgumentNullException

keysnull인 경우

ArgumentOutOfRangeException

indexkeys의 하한보다 작은 경우

- 또는 -

length가 0보다 작은 경우

ArgumentException

itemsnull이 아니고 keys의 하한이 items의 하한과 일치하지 않는 경우

- 또는 -

itemsnull이 아니고 keys의 길이가 items의 길이보다 긴 경우

- 또는 -

indexlengthkeysArray에서 올바른 범위를 지정하지 않는 경우

- 또는 -

itemsnull이 아니고 indexlengthitemsArray에서 올바른 범위를 지정하지 않는 경우

- 또는 -

정렬하는 동안comparer 구현에서 오류가 발생한 경우 예를 들어, comparer는 항목을 항목 자체와 비교할 때 0을 반환하지 않을 수 있습니다.

InvalidOperationException

comparernull이고 keysArray의 요소 중 하나 이상이 IComparable<T> 제네릭 인터페이스를 구현하지 않는 경우

keys Array 의 각 키에 해당하는 항목이 itemsArray에 있습니다. 정렬하는 동안 키의 위치가 바뀌면 itemsArray의 해당 항목도 동시에 위치가 바뀝니다. 따라서 itemsArraykeysArray에 있는 해당 키의 배열에 따라 정렬됩니다.

comparernull이면 다른 모든 키와 비교할 수 있도록 keysArray의 지정한 요소 범위에 있는 각 키에서 IComparable<T> 제네릭 인터페이스를 구현해야 합니다.

항목이 키보다 많은 경우 정렬할 수 있지만 해당하는 키가 없는 항목은 정렬되지 않습니다. 키가 항목보다 많을 경우 정렬할 수 없습니다. 이렇게 하면 ArgumentException이 throw됩니다.

정렬이 완료되지 않으면 결과가 정의되지 않습니다.

이 메서드는 QuickSort 알고리즘을 사용합니다. 이 구현에서는 불안정한 정렬을 수행합니다. 즉, 두 개의 같은 요소가 있을 경우 이들 요소의 순서가 유지되지 않을 수 있습니다. 이와 반대로 안정된 정렬은 동일한 요소의 순서를 그대로 유지합니다.

평균적으로 이 메서드는 O(n log n) 연산이며, 여기서 nlength입니다. 최악의 경우 이 메서드는 O(n ^ 2) 연산입니다.

다음 코드 예제에서는 키 및 값을 나타내는 배열 쌍을 정렬하기 위한 Sort<TKey, TValue>(TKey[], TValue[]), Sort<TKey, TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32)Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) 제네릭 메서드 오버로드를 보여 줍니다.

이 코드 예제에서는 IComparer<string>(Visual Basic의 경우 IComparer(Of String), Visual C++의 경우 IComparer<String^>) 제네릭 인터페이스를 구현하는 ReverseCompare라는 문자열의 대체 비교자를 정의합니다. 비교자는 CompareTo(String) 메서드를 호출하고 비교 대상의 순서를 반대로 바꾸어 문자열이 오름차순이 아니라 내림차순으로 정렬되도록 합니다.

이 코드 예제에서는 공룡 이름(키)의 배열과 각 공룡의 최대 길이(값)를 미터 단위로 나타내는 정수의 배열을 만들어 표시합니다. 그런 다음 배열을 여러 번 정렬하여 표시합니다.

참고참고:

Visual Basic, C# 및 C++에서는 처음 두 개의 인수 형식에서 제네릭 형식 매개 변수의 형식을 유추하기 때문에 제네릭 메서드 호출은 상응하는 제네릭이 아닌 메서드 호출과 다르게 보이지 않습니다.


using System;
using System.Collections.Generic;

public class ReverseComparer : IComparer<string>
{
   public int Compare(string x, string y)
   {
      // Compare y and x in reverse order.
      return y.CompareTo(x);
   }
}

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      string[] dinosaurs = {
            "Seismosaurus", 
            "Chasmosaurus", 
            "Coelophysis", 
            "Mamenchisaurus", 
            "Caudipteryx", 
            "Cetiosaurus"  };

      int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

      outputBlock.Text += "\n";
      for (int i = 0; i < dinosaurs.Length; i++)
      {
         outputBlock.Text += String.Format("{0}: up to {1} meters long.",
             dinosaurs[i], dinosaurSizes[i]) + "\n";
      }

      outputBlock.Text += String.Format("\nSort(dinosaurs, dinosaurSizes)") + "\n";
      Array.Sort(dinosaurs, dinosaurSizes);

      outputBlock.Text += "\n";
      for (int i = 0; i < dinosaurs.Length; i++)
      {
         outputBlock.Text += String.Format("{0}: up to {1} meters long.",
             dinosaurs[i], dinosaurSizes[i]) + "\n";
      }

      ReverseComparer rc = new ReverseComparer();

      outputBlock.Text += String.Format("\nSort(dinosaurs, dinosaurSizes, rc)") + "\n";
      Array.Sort(dinosaurs, dinosaurSizes, rc);

      outputBlock.Text += "\n";
      for (int i = 0; i < dinosaurs.Length; i++)
      {
         outputBlock.Text += String.Format("{0}: up to {1} meters long.",
             dinosaurs[i], dinosaurSizes[i]) + "\n";
      }

      outputBlock.Text += String.Format("\nSort(dinosaurs, dinosaurSizes, 3, 3)") + "\n";
      Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

      outputBlock.Text += "\n";
      for (int i = 0; i < dinosaurs.Length; i++)
      {
         outputBlock.Text += String.Format("{0}: up to {1} meters long.",
             dinosaurs[i], dinosaurSizes[i]) + "\n";
      }

      outputBlock.Text += String.Format("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)") + "\n";
      Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

      outputBlock.Text += "\n";
      for (int i = 0; i < dinosaurs.Length; i++)
      {
         outputBlock.Text += String.Format("{0}: up to {1} meters long.",
             dinosaurs[i], dinosaurSizes[i]) + "\n";
      }
   }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */


Silverlight

5, 4, 3에서 지원

Windows Phone용 Silverlight

Windows Phone OS 7.1, Windows Phone OS 7.0에서 지원

XNA Framework

Xbox 360, Windows Phone OS 7.0에서 지원

Silverlight에서 지원되는 운영 체제 및 브라우저에 대한 자세한 내용은 지원되는 운영 체제 및 브라우저을 참조하십시오.

커뮤니티 추가 항목

추가
표시: