本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

Array.BinarySearch 方法 (Array, Object)

 

使用陣列每個項目和指定物件所實作的 IComparable 介面,在整個一維已排序的陣列中搜尋特定的項目。

命名空間:   System
組件:  mscorlib (於 mscorlib.dll)

public static int BinarySearch(
	Array array,
	object value
)

參數

array
Type: System.Array

要搜尋的已排序之一維 Array

value
Type: System.Object

要搜尋的物件。

傳回值

Type: System.Int32

如果找到 value,則為指定的 array 中指定的 value 索引;否則為負數。 如果找不到 valuevalue 小於 array 的一或多個項目,傳回的負數是大於 value 的第一個項目索引的位元補數。 如果找不到 valuevalue 大於 array 的所有項目,傳回的負數是 (最後一個項目索引加 1) 的位元補數。 如果以未排序的 array 來呼叫這個方法,傳回值會不正確且可能傳回負數,即使 value 出現在 array 中也一樣。

Exception Condition
ArgumentNullException

arraynull

RankException

array 是多維的。

ArgumentException

value 的類型與 array 項目不相容。

InvalidOperationException

value 不會實作 IComparable 介面,且搜尋時遇到未實作 IComparable 介面的項目。

這個方法不支援搜尋的陣列,其中包含負值的索引。 array呼叫這個方法之前,必須先排序。

如果Array不包含指定的值,此方法會傳回負整數。 您可以將套用的位元補數 」 運算子 (~ 在 C# 中,Not在 Visual Basic 中) 設為負數的結果來產生索引。 此索引大於陣列的上限是否有任何元素大於value陣列中。 否則,它是第一個元素大於索引value

可能是value或每個項目array必須實作IComparable介面,用於比較。 項目array已必須以遞增的值,根據所定義的排序次序排序IComparable實作; 否則結果可能不正確。

System_CAPS_note注意

如果value未實作IComparable介面的項目array不需要測試的IComparable之前開始搜尋。 如果搜尋遇到未實作的項目,會擲回例外狀況IComparable

允許重複的項目。 如果Array包含多個元素等於value,方法會傳回的其中一個相符項目,並不一定是第一個索引。

null一定要與其他任何參考類型; 比較因此,比較null並不會產生例外狀況。

System_CAPS_note注意

   每個項目測試,value傳遞至適當IComparable實作,即使valuenull 也就是說,IComparable實作可讓您決定如何為指定項目與比較null

這個方法是 O (記錄n) 作業,其中nLengtharray

下列程式碼範例示範如何使用BinarySearch找不到中的特定物件Array

System_CAPS_note注意

建立陣列的元素以遞增排序次序。 BinarySearch方法必須要以遞增順序排序的陣列。

using System;

public class SamplesArray
{
    public static void Main()
    {
        // Creates and initializes a new Array.
        Array myIntArray = Array.CreateInstance(typeof(Int32), 5);

        myIntArray.SetValue(8, 0);
        myIntArray.SetValue(2, 1);
        myIntArray.SetValue(6, 2);
        myIntArray.SetValue(3, 3);
        myIntArray.SetValue(7, 4);

        // Do the required sort first
        Array.Sort(myIntArray);

        // 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 = 1;
        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)
    {
        int i = 0;
        int cols = myArr.GetLength(myArr.Rank - 1);
        foreach (object o in myArr)
        {
            if ( i < cols )
            {
                i++;
            }
            else
            {
                Console.WriteLine();
                i = 1;
            }
            Console.Write( "\t{0}", o);
        }
        Console.WriteLine();
    }
}
// This code produces the following output.
//
//The Int32 array contains the following:
//        2       3       6       7       8
//The object to search for (1) is not found. The next larger object is at index 0
//
//The object to search for (6) is at index 2.

通用 Windows 平台
自 8 起供應
.NET Framework
自 1.1 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 2.0 起供應
Windows Phone Silverlight
自 7.0 起供應
Windows Phone
自 8.1 起供應
回到頁首
顯示: