この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Array.BinarySearch<T> メソッド (T[], T)

 

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

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

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

パラメーター

array

検索対象となる、インデックス番号が 0 から始まる並べ替え済みの 1 次元 Array

value

検索するオブジェクト。

戻り値

Type: System.Int32

指定した value が存在する場合は、指定した array におけるその value のインデックス。 value が見つからず、valuearray 内の 1 つ以上の要素よりも小さい場合は、負の値。これは、value より大きい最初の要素のインデックスのビットごとの補数となります。 value が見つからず、valuearray 内のどの要素よりも大きい場合は、負の値。これは、最後の要素のインデックス + 1 のビットごとの補数となります。

型パラメーター

T

配列要素の型。

Exception Condition
ArgumentNullException

arraynull です。

InvalidOperationException

TIComparable<T> ジェネリック インターフェイスを実装していません。

このメソッドは、負の値のインデックスを含む配列の検索をサポートしていません。 arrayこのメソッドを呼び出す前に並べ替える必要があります。

場合arrayに指定された値が含まれていないメソッドは、負の整数を返します。ビットごとの補数演算子を適用することができます (~、C# の場合は、 Not Visual Basic で)、インデックスを作成するには、負の結果をします。大きい要素がない場合、このインデックスは、配列のサイズに等しい、value配列にします。超える最初の要素のインデックスはそれ以外の場合、valueです。

T実装する必要があります、 IComparable<T> 、比較のために使用されるジェネリック インターフェイスです。要素のarrayで定義されている並べ替え順序に従って値を増やすことで既に並べ替える必要があります、IComparable<T>実装です。それ以外の場合、結果が正しくない可能性があります。

重複する要素は許可されます。場合、Arrayに等しい複数の要素が含まれています。 value、メソッドは、発生した回数、1 つだけとは限りません 1 つ目のインデックスを返します。

null常と比較するその他の参照型です。そのためとの比較null例外を生成しません。

System_CAPS_noteメモ

これをテストすると、すべての要素のvalue、適切なに渡されるIComparable<T>場合でも、実装valuenullです。つまり、IComparable<T>実装を指定された要素を比較する方法を決定するnullです。

このメソッドは、O(log n) 操作では、ここでnは、Lengtharrayです。

次のコード例で、Sort<T>(T[])ジェネリック メソッドのオーバー ロードとBinarySearch<T>(T[], T)ジェネリック メソッドのオーバー ロードします。任意の順序で文字列の配列が作成されます。

配列は表示され、並べ替え、再び表示されます。使用するために、配列を並べ替える必要があります、BinarySearch<T>メソッドです。

System_CAPS_noteメモ

呼び出し、Sort<T>BinarySearch<T>Visual Basic、c#、および C++ は、最初の引数の型からのジェネリック型パラメーターの型を推論するため、ジェネリック メソッドの呼び出しを対応する非ジェネリックの間に違い探さないです。使用する場合、 Ildasm.exe (IL 逆アセンブラー) Microsoft intermediate language (MSIL) を調べることができます、一般的なメソッドが呼び出されることを参照しています。

BinarySearch<T>(T[], T)ジェネリック メソッドのオーバー ロードを使用して 2 つの文字列を検索することに含まれていない、配列で、1 つを 1 つです。配列との戻り値、BinarySearch<T>メソッドに渡される、ShowWhereジェネリック メソッド以外の場合は、要素検索文字列には、該当の間で、配列内である場合、文字列が見つかった場合は、インデックス値が表示されます。インデックスは、文字列が、配列にない場合は、負ため、ShowWhereメソッドは、ビットごとの補数 (、~ c# および Visual C は、演算子XorVisual Basic で-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.
 */

Universal Windows Platform
4.5 から利用可能
.NET Framework
2.0 から利用可能
Portable Class Library
サポート対象 : portable .NET platforms
Silverlight
2.0 から利用可能
Windows Phone Silverlight
7.0 から利用可能
Windows Phone
8.1 から利用可能
トップに戻る
表示: