次の方法で共有


Array.BinarySearch メソッド

バイナリ サーチ アルゴリズムを使用して、並べ替え済みの 1 次元の Array 内で値を検索します。

オーバーロードの一覧

1 次元の並べ替え済み Array の各要素および指定したオブジェクトによって実装されている IComparable インターフェイスを使用して、その Array 全体の中から特定の要素を検索します。

.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;

指定した IComparer インターフェイスを使用して、1 次元の並べ替え済み Array 全体の中から値を検索します。

[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;

1 次元の並べ替え済み Array の各要素および指定した値によって実装されている IComparable インターフェイスを使用して、その Array 範囲の中から値を検索します。

[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;

指定した IComparer インターフェイスを使用して、1 次元の並べ替え済み Array 範囲の中から値を検索します。

.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;

使用例

BinarySearch を使用して Array 内の特定のオブジェクトを検索する方法を次のコード例に示します。

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

参照

Array クラス | Array メンバ | System 名前空間