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

Array.BinarySearch<T> 메서드 (T[], T)

Array 의 각 요소 및 지정한 개체에서 구현되는 IComparable<T> 제네릭 인터페이스를 사용하여 1차원으로 정렬된 전체 배열에서 특정 요소를 검색합니다.

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

public static int BinarySearch<T>(
	T[] array,
	T value
)

형식 매개 변수

T

배열 요소의 형식입니다.

매개 변수

array
형식: T[]
검색할 1차원으로 정렬된 Array(인덱스는 0부터 시작)입니다.
value
형식: T
검색할 개체입니다.

반환 값

형식: System.Int32
지정된 arrayvalue가 있는 경우 해당 value의 인덱스입니다. value가 없고 valuearray에 있는 하나 이상의 요소보다 작은 경우 value보다 큰 첫째 요소 인덱스의 비트 보수인 음수입니다. value가 없고 valuearray에 있는 요소보다 큰 경우 마지막 요소에 1을 더한 인덱스의 비트 보수인 음수입니다.

예외조건
ArgumentNullException

arraynull입니다.

InvalidOperationException

TIComparable<T> 제네릭 인터페이스를 구현하지 않는 경우

이 메서드는 음의 인덱스를 포함하는 검색 배열을 지원하지 않습니다. array는 이 메서드를 호출하기 전에 정렬해야 합니다.

이러한 array 에 지정한 값이 없는 경우 해당 메서드는 음의 정수를 반환합니다. 비트에 관한 구성 연산자(~ C#에서, Not Visual Basic에서)는 음수결과를 개요를 생성하기 위해 적용할 수 있습니다. 개요가 배열의 크기와 동일한 경우, 배열에서 value 보다 큰 요소는 없습니다. 그렇지 않으면 value보다 큰 첫 번째 요소의 인덱스입니다.

TIComparable<T> 제네릭 인터페이스를 구현합니다. 이는 비교를 이용합니다. array의 요소는 IComparable<T> 구현에 정의된 정렬 순서에 따라 값이 증가하도록 정렬되어 있어야 합니다. 그렇지 않으면 잘못된 결과가 반환될 수 있습니다.

요소는 중복할 수 있습니다. Array value와 동일한 요소가 두 개 이상 포함된 경우, 해당 메서드는 발견되는 대상 중 하나에 대한 인덱스만 무작위로 반환합니다.

null 은 항상 다른 모든 참조 형식과 비교될 수 있으므로 null와 비교하더라도 예외가 생성되지는 않습니다.

참고참고

테스트된 모든 요소의 경우 valuenull인 경우에도 적절한 IComparable<T> 구현에 value가 전달됩니다. 즉, IComparable<T> 구현에서 지정된 요소를 null과 비교하는 방법을 결정합니다.

이 메서드는 O(log n) 연산이며, 여기서 narrayLength입니다.

다음 코드 예제에서는 Sort<T>(T[]) 제네릭 메서드 오버로드와 BinarySearch<T>(T[], T) 제네릭 메서드 오버로드를 보여 줍니다. 이 예제에서는 문자열 배열을 임의의 순서로 만듭니다.

그런 다음 배열을 표시하고 정렬하고 다시 표시합니다. BinarySearch 메서드를 사용하려면 배열을 정렬해야 합니다.

참고참고

Visual Basic, C# 및 C++에서는 첫 번째 인수의 형식에서 제네릭 형식 매개 변수의 형식을 유추하기 때문에 SortBinarySearch 제네릭 메서드 호출은 상응하는 제네릭이 아닌 메서드 호출과 다르게 보이지 않습니다. Ildasm.exe(IL 디스어셈블러) 를 사용하여 MSIL(Microsoft Intermediate Language)을 검사하는 경우 제네릭 메서드가 호출되는 것을 확인할 수 있습니다.

그런 다음 BinarySearch<T>(T[], T) 제네릭 메서드 오버로드를 사용하여 배열에 없는 문자열 하나와 배열에 있는 문자열 하나를 검색할 수 있습니다. 배열 및 BinarySearch 메서드의 반환 값은 ShowWhere 제네릭 메서드에 전달됩니다. 이 메서드는 문자열을 찾으면 해당 인덱스 값을 표시하고, 검색 문자열이 배열에 없으면 해당 문자열 양쪽의 요소를 표시합니다. 문자열이 배열에서 없으면 인덱스는 음수이므로 ShowWhere 메서드는 비트 보수(C# 및 Visual C++의 경우 ~ 연산자, Visual Basic의 경우 Xor -1)를 사용하여 목록에서 검색 문자열보다 큰 첫 번째 요소의 인덱스를 가져옵니다.


using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus", 
                              "Amargasaurus", 
                              "Tyrannosaurus", 
                              "Mamenchisaurus", 
                              "Deinonychus", 
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

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

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows Phone 앱용 .NET

Windows Phone 8, Silverlight 8.1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

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

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft