Array.BinarySearch Method
Searches a one-dimensional sorted Array for a value, using a binary search algorithm.
Overload List
Searches an entire one-dimensional sorted Array for a specific element, using the IComparable interface implemented by each element of the Array and by the specified object.
Supported by the .NET Compact Framework.
[Visual Basic] Overloads Public Shared Function BinarySearch(Array, Object) As Integer
[C#] public static int BinarySearch(Array, object);
[C++] public: static int BinarySearch(Array*, Object*);
[JScript] public static function BinarySearch(Array, Object) : int;
Searches an entire one-dimensional sorted Array for a value, using the specified IComparer interface.
[Visual Basic] Overloads Public Shared Function BinarySearch(Array, Object, IComparer) As Integer
[C#] public static int BinarySearch(Array, object, IComparer);
[C++] public: static int BinarySearch(Array*, Object*, IComparer*);
[JScript] public static function BinarySearch(Array, Object, IComparer) : int;
Searches a section of a one-dimensional sorted Array for a value, using the IComparable interface implemented by each element of the Array and by the specified value.
[Visual Basic] Overloads Public Shared Function BinarySearch(Array, Integer, Integer, Object) As Integer
[C#] public static int BinarySearch(Array, int, int, object);
[C++] public: static int BinarySearch(Array*, int, int, Object*);
[JScript] public static function BinarySearch(Array, int, int, Object) : int;
Searches a section of a one-dimensional sorted Array for a value, using the specified IComparer interface.
Supported by the .NET Compact Framework.
[Visual Basic] Overloads Public Shared Function BinarySearch(Array, Integer, Integer, Object, IComparer) As Integer
[C#] public static int BinarySearch(Array, int, int, object, IComparer);
[C++] public: static int BinarySearch(Array*, int, int, Object*, IComparer*);
[JScript] public static function BinarySearch(Array, int, int, Object, IComparer) : int;
Example
The following code example shows how to use BinarySearch to locate a specific object in an Array.
[Visual Basic] Imports System Imports Microsoft.VisualBasic Public Class SamplesArray Public Shared Sub Main() ' Creates and initializes a new Array. Dim myIntArray As Array = Array.CreateInstance(GetType(Int32), 5) Dim i As Integer For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0) myIntArray.SetValue(i * 2, i) Next i ' Displays the values of the Array. Console.WriteLine("The Int32 array contains the following:") PrintValues(myIntArray) ' Locates a specific object that does not exist in the Array. Dim myObjectOdd As Object = 3 FindMyObject(myIntArray, myObjectOdd) ' Locates an object that exists in the Array. Dim myObjectEven As Object = 6 FindMyObject(myIntArray, myObjectEven) End Sub Public Shared Sub FindMyObject(myArr As Array, myObject As Object) Dim myIndex As Integer = Array.BinarySearch(myArr, myObject) If myIndex < 0 Then Console.WriteLine("The object to search for ({0}) is not found. " _ + "The next larger object is at index {1}.", myObject, Not(myIndex)) Else Console.WriteLine("The object to search for ({0}) is at index " _ + "{1}.", myObject, myIndex) End If End Sub Public Shared Sub PrintValues(myArr As Array) Dim myEnumerator As System.Collections.IEnumerator = _ myArr.GetEnumerator() Dim i As Integer = 0 Dim cols As Integer = myArr.GetLength((myArr.Rank - 1)) While myEnumerator.MoveNext() If i < cols Then i += 1 Else Console.WriteLine() i = 1 End If Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current) End While Console.WriteLine() End Sub End Class ' 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. [C#] using System; public class SamplesArray { public static void Main() { // 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 ); // Displays the values of the Array. Console.WriteLine( "The Int32 array contains the following:" ); PrintValues( myIntArray ); // Locates a specific object that does not exist in the Array. Object myObjectOdd = 3; FindMyObject( myIntArray, myObjectOdd ); // Locates an object that exists in the Array. Object myObjectEven = 6; FindMyObject( myIntArray, myObjectEven ); } public static void FindMyObject( Array myArr, Object myObject ) { int myIndex=Array.BinarySearch( myArr, myObject ); if ( myIndex < 0 ) Console.WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex ); else Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex ); } public static void PrintValues( 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 { Console.WriteLine(); i = 1; } Console.Write( "\t{0}", myEnumerator.Current ); } Console.WriteLine(); } } /* 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. */ [C++] #using <mscorlib.dll> using namespace System; void FindMyObject( Array* myArr, Object* myObject ); void PrintValues( Array* myArr ); void main() { // Creates and initializes a new Array instance. Array* myIntArray = Array::CreateInstance( __typeof(Int32), 5 ); for ( int i = myIntArray->GetLowerBound(0); i <= myIntArray->GetUpperBound(0); i++ ) myIntArray->SetValue( __box(i*2), i ); // Displays the values of the Array. Console::WriteLine( "The Int32 array contains the following:" ); PrintValues( myIntArray ); // Locates a specific object that does not exist in the Array. Object* myObjectOdd = __box(3); FindMyObject( myIntArray, myObjectOdd ); // Locates an object that exists in the Array. Object* myObjectEven = __box(6); FindMyObject( myIntArray, myObjectEven ); } void FindMyObject( Array* myArr, Object* myObject ) { int myIndex = Array::BinarySearch( myArr, myObject ); if ( myIndex < 0 ) Console::WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, __box(~myIndex) ); else Console::WriteLine( "The object to search for ({0}) is at index {1}.", myObject, __box(myIndex) ); } void PrintValues( 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 { Console::WriteLine(); i = 1; } Console::Write( "\t{0}", myEnumerator->Current ); } Console::WriteLine(); } /* 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. */ [JScript] import System import System.Collections // Creates and initializes a new Array. var myIntArray : System.Array = System.Array.CreateInstance( Int32, 5); for ( var i : int = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ ) myIntArray.SetValue( Int32(i*2), i ); // Displays the values of the Array. Console.WriteLine( "The Int32 array contains the following:" ); PrintValues( myIntArray ); // Locates a specific object that does not exist in the Array. var myObjectOdd : Object = 3; FindMyObject( myIntArray, myObjectOdd ); // Locates an object that exists in the Array. var myObjectEven : Object = 6; FindMyObject( myIntArray, myObjectEven ); function FindMyObject( myArr : System.Array, myObject : Object) { var myIndex : int = System.Array.BinarySearch( myArr, myObject ); if ( myIndex < 0 ) Console.WriteLine( "The object to search for ({0}) is not found. " + "The next larger object is at index {1}.", myObject, ~myIndex ); else Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex ); } function PrintValues( myArr : System.Array ) { var arrEnum : IEnumerator = myArr.GetEnumerator(); arrEnum.Reset(); while (arrEnum.MoveNext()) { Console.Write( "{0,-6}", arrEnum.Current.ToString()); } Console.WriteLine(); } /* 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. */