C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のArray.BinarySearch(Array, Object)メソッドとは?使い方とサンプルコード解説

C#のArray.BinarySearch(Array, Object)メソッドは、ソート済みの1次元配列全体を対象に、指定した要素を検索するための静的メソッドです。検索の際には、配列の各要素および検索対象オブジェクトに実装されたIComparableインターフェースが使用されます。

構文

public static int BinarySearch (Array arr, object val);

パラメータ

  • arr: 検索対象となる、ソート済みの1次元配列
  • val: 検索するオブジェクト

戻り値

指定した要素が見つかった場合は、そのインデックス(0から始まる番号)をint型で返します。見つからなかった場合は負の値を返します。この負の値は「次に大きい要素のインデックスのビットごとの補数」を表しており、ビット反転演算子(~)を使うことで、その要素を挿入すべき位置を求めることができます。

サンプル1:整数型配列の場合

using System;

public class Demo {
    public static void Main() {
        int[] intArr = {5, 10, 15, 20};
        Array.Sort(intArr);

        Console.WriteLine("配列の要素...");
        foreach(int i in intArr) {
            Console.WriteLine(i);
        }

        Console.Write("要素 20 のインデックス = " + Array.BinarySearch(intArr, 20));
    }
}

出力結果

配列の要素...
5
10
15
20
要素 20 のインデックス = 3

この例では、まずArray.Sort()メソッドで配列を昇順にソートしてから、BinarySearchを実行しています。要素「20」は配列の4番目、つまりインデックス3に存在するため、戻り値として「3」が返されます。

サンプル2:文字列型配列の場合

using System;

public class Demo {
    public static void Main() {
        string[] strArr = {"John", "Tim", "Fedric", "Gary", "Harry", "Damien"};
        Array.Sort(strArr);

        Console.WriteLine("配列の要素...");
        foreach(string s in strArr) {
            Console.WriteLine(s);
        }

        Console.Write("\n要素 Gary のインデックス = " + Array.BinarySearch(strArr, "Gary"));
        Console.Write("\n要素 Tom のインデックス = " + Array.BinarySearch(strArr, "Tom"));
    }
}

出力結果

配列の要素...
Damien
Fedric
Gary
Harry
John
Tim

要素 Gary のインデックス = 2
要素 Tom のインデックス = -7

ポイント解説

文字列の例では、ソート後の配列に存在する「Gary」はインデックス2として正しく検出されています。一方、配列に存在しない「Tom」を検索した場合は「-7」という負の値が返されます。この値は、Tomを挿入するならば配列の末尾(インデックス6)に相当する位置になることを示しています。つまり、戻り値が負であれば「要素が見つからなかった」と判断できるのです。

注意点: BinarySearchメソッドを使用する前に、必ずArray.Sort()などで配列を事前にソートしておく必要があります。ソートされていない配列に対して実行すると、二分探索の前提が崩れるため、誤った結果が返される可能性があります。

  1. C#のMathF.Acosh()メソッドとは?使い方をサンプルコード付きで解説

    C#のMathF.Acosh()メソッドは、指定されたfloat型(単精度浮動小数点数)の値に対する逆双曲線余弦(アークハイパボリックコサイン)を計算して返すメソッドです。構文MathF.Acosh()メソッドの基本的な構文は以下の通りです。public static float Acosh (float val);引数valには、逆双曲線余弦を求めたい浮動小数点数を指定します。戻り値もfloat型で返されます。注意点:1未満の値を指定した場合逆双曲線余弦は数学的に定義域が1以上の値となるため、1未満の値を渡すとNaN(Not a Number)が返されます。サンプルコード1まず、1未満の値を

  2. C#のArray.BinarySearchメソッドの使い方 – 配列要素の位置を検索する

    C#のArray.BinarySearchメソッドを使用すると、配列内の要素がどの位置(インデックス)にあるかを検索できます。このメソッドは二分探索(バイナリサーチ)アルゴリズムを採用しているため、大量のデータを扱う場合でも高速に処理できるのが特徴です。 Array.BinarySearchメソッドの基本的な使い方 まず、検索対象となる文字列配列を設定します。 string[] str = { a, m, i, t }; 次に、Array.BinarySearchメソッドを使って、文字「t」の位置を取得します。 Array.BinarySearch(str, t); サンプルコード 以下に