MSDN Library
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Array.BinarySearch 메서드 (Array, Object)

2013-12-13

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

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public static int BinarySearch(
	Array array,
	Object value
)

매개 변수

array
형식: System.Array
검색할 1차원으로 정렬된 Array입니다.
value
형식: System.Object
검색할 개체입니다.

반환 값

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

예외조건
ArgumentNullException

arraynull인 경우

RankException

array가 다차원 배열인 경우

ArgumentException

value의 형식이 array의 요소와 호환되지 않는 경우

InvalidOperationException

valueIComparable 인터페이스를 구현하지 않고 검색에서 IComparable 인터페이스를 구현하지 않는 요소를 발견하는 경우

array는 이 메서드를 호출하기 전에 정렬해야 합니다.

Array에 지정한 값이 없는 경우 해당 메서드는 음의 정수를 반환합니다. 음수 결과에 비트 보수 연산자(~)를 적용(Visual Basic의 경우 음수 결과와 -1에 대해 Xor 수행)하여 인덱스를 생성할 수 있습니다. 이 인덱스가 배열 크기보다 크거나 같으면 배열에 value보다 큰 요소가 없습니다. 그렇지 않으면 value보다 큰 첫 번째 요소의 인덱스입니다.

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

참고참고:

valueIComparable 인터페이스를 구현하지 않으면 array의 요소는 검색이 시작되기 전에 IComparable에 대해 테스트되지 않습니다. 검색에서 IComparable을 구현하지 않는 요소를 발견하면 예외가 발생합니다.

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

null은 항상 다른 모든 참조 형식과 비교될 수 있으므로 null과 비교하더라도 예외가 생성되지는 않습니다. 정렬할 때 null은 다른 개체보다 작은 것으로 간주됩니다.

참고참고:

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

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

다음 코드 예제에서는 BinarySearch를 사용하여 Array에서 특정 개체를 찾는 방법을 설명합니다.

참고참고:

배열은 해당 요소를 사용하여 오름차순으로 만듭니다. BinarySearch 메서드를 사용하려면 배열을 오름차순으로 정렬해야 합니다.

참고참고:

이 예제를 실행하려면 Windows Phone용 정적 TextBlock 컨트롤이 있는 예제 빌드를 참조하세요.


using System;
public class Example
{

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {

      // Creates and initializes a new Array.
      Array myIntArray = Array.CreateInstance(typeof(Int32), 5);
      for (int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++)
         myIntArray.SetValue(i * 2, i);

      // Do the required sort first
      Array.Sort(myIntArray);

      // Displays the values of the Array.
      outputBlock.Text += "The Int32 array contains the following:" + "\n";
      PrintValues(outputBlock, myIntArray);

      // Locates a specific object that does not exist in the Array.
      Object myObjectOdd = 3;
      FindMyObject(outputBlock, myIntArray, myObjectOdd);

      // Locates an object that exists in the Array.
      Object myObjectEven = 6;
      FindMyObject(outputBlock, myIntArray, myObjectEven);
   }

   public static void FindMyObject(System.Windows.Controls.TextBlock outputBlock, Array myArr, Object myObject)
   {
      int myIndex = Array.BinarySearch(myArr, myObject);
      if (myIndex < 0)
         outputBlock.Text += String.Format("The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex) + "\n";
      else
         outputBlock.Text += String.Format("The object to search for ({0}) is at index {1}.", myObject, myIndex) + "\n";
   }


   public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, Array myArr)
   {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength(myArr.Rank - 1);
      while (myEnumerator.MoveNext())
      {
         if (i < cols)
         {
            i++;
         }
         else
         {
            outputBlock.Text += "\n";
            i = 1;
         }
         outputBlock.Text += String.Format("\t{0}", myEnumerator.Current);
      }
      outputBlock.Text += "\n";
   }
}
/* 
This code produces the following output.

The Int32 array contains the following:
    0    2    4    6    8
The object to search for (3) is not found. The next larger object is at index 2.
The object to search for (6) is at index 3.
 */


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시:
© 2016 Microsoft