내보내기(0) 인쇄
모두 확장
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본

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

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

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

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

Type 매개 변수

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++에서는 처음 두 개의 인수 형식에서 제네릭 형식 매개 변수의 형식을 유추하기 때문에 제네릭 메서드 호출은 상응하는 제네릭이 아닌 메서드 호출과 다르게 보이지 않습니다. Ildasm.exe(MSIL 디스어셈블러) 를 사용하여 MSIL(Microsoft Intermediate Language)을 검사하는 경우 제네릭 메서드가 호출되는 것을 확인할 수 있습니다.


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 Main()
    {
        string[] dinosaurs = {
            "Seismosaurus", 
            "Chasmosaurus", 
            "Coelophysis", 
            "Mamenchisaurus", 
            "Caudipteryx", 
            "Cetiosaurus"  };

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* 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.
 */


.NET Framework

4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows 7, Windows Vista SP1 이상, Windows XP SP3, Windows XP SP2 x64 버전, Windows Server 2008(Server Core는 지원되지 않음), Windows Server 2008 R2(Server Core는 SP1 이상에서 지원됨), Windows Server 2003 SP2

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft