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

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


C#のArray.BinarySearch()メソッドは、1次元のソート済み配列内の指定した範囲から特定の値を検索するために使用されます。検索処理では、配列の各要素および指定した値に実装されているIComparableインターフェースが利用されます。

注意:このメソッドはソート済みの配列を前提としています。未ソートの配列に対して使用すると、正しい結果が得られない場合があるため、事前にArray.Sort()などで並べ替えておく必要があります。

構文

構文は以下の通りです。

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

各パラメーターの意味は次の通りです。

  • arr:検索対象となる1次元配列
  • index:検索範囲の開始インデックス
  • len:検索する範囲の長さ(要素数)
  • val:検索したいオブジェクト

戻り値は、指定した値が見つかった場合はそのインデックス、見つからなかった場合は負の値となります。負の値のビットごとの補数(~演算子)を取ると、その値を挿入すべき位置のインデックスを求めることができます。

サンプルコード1

まずは基本的な使用例を見てみましょう。

using System;
public class Demo {
    public static void Main() {
        int[] intArr = {10, 20, 30, 40, 50};
        Array.Sort(intArr);
        Console.WriteLine("Array elements...");
        foreach(int i in intArr) {
            Console.WriteLine(i);
        }
        Console.Write("Element 20 is at index = " + Array.BinarySearch(intArr, 1, 3, 20));
    }
}

出力結果

上記のコードを実行すると、以下の出力が得られます。

Array elements...
10
20
30
40
50
Element 20 is at index = 1

この例では、インデックス1から長さ3の範囲(要素「20」「30」「40」)の中から値「20」を検索しています。結果として、インデックス「1」が返されています。

サンプルコード2

続いて、検索対象の値が範囲内に存在しない場合の例を見てみましょう。

using System;
public class Demo {
    public static void Main() {
        int[] intArr = {5, 10, 15, 20};
        Array.Sort(intArr);
        Console.WriteLine("Array elements...");
        foreach(int i in intArr) {
            Console.WriteLine(i);
        }
        Console.Write("Element 25 is at index = " + Array.BinarySearch(intArr, 0, 2, 20));
    }
}

出力結果

上記のコードを実行すると、以下の出力が得られます。

Array elements...
5
10
15
20
Element 25 is at index = -3

この例では、インデックス0から長さ2の範囲(要素「5」「10」)の中から値「20」を検索しています。範囲内に該当する値が存在しないため、負の値「-3」が返されました。この値のビットごとの補数を取ると「2」となり、検索範囲を基準にした場合の挿入位置を示しています。

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

    はじめにC#のInt32.GetTypeCode()メソッドは、値型Int32(int)に対応するTypeCodeを返すためのメソッドです。変数がどの型分類に属しているかをTypeCode列挙体として確認したい場合に利用できます。構文メソッドの構文は以下の通りです。public TypeCode GetTypeCode ();引数は取らず、戻り値として TypeCode.Int32 を返します。サンプルコード1:基本的な使い方まずは、Int32.GetTypeCode()メソッドの基本的な使用例を見てみましょう。using System; public class Demo { publ

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

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