Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Array.BinarySearch-Methode: (Array, Object)

 

Durchsucht ein ganzes sortiertes eindimensionales Array mithilfe der IComparable-Schnittstelle, die von jedem Element des Arrays und durch das angegebene Objekt implementiert wird, nach einem bestimmten Element.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public static int BinarySearch(
	Array array,
	object value
)

Parameter

array
Type: System.Array

Das zu durchsuchende sortierte eindimensionale Array.

value
Type: System.Object

Das Objekt, nach dem gesucht werden soll.

Rückgabewert

Type: System.Int32

Der Index des angegebenen value im angegebenen array, sofern value gefunden wurde, andernfalls eine negative Zahl. Wenn value nicht gefunden wurde und value kleiner als mindestens ein Element in array ist, entspricht die zurückgegebene negative Zahl dem bitweisen Komplement des Indexes des ersten Elements, das größer als value ist. Wenn value nicht gefunden wurde und value größer als alle Elemente in array ist, entspricht die zurückgegebene negative Zahl dem bitweisen Komplement (des Indexes des letzten Elements plus 1). Wenn diese Methode mit einem nicht sortierten array aufgerufen wird, kann der Rückgabewert falsch sein und selbst dann eine negative Zahl zurückgegeben werden, wenn value in array vorhanden ist.

Exception Condition
ArgumentNullException

array ist null.

RankException

array ist mehrdimensional.

ArgumentException

value verfügt über einen Typ, der nicht mit den Elementen von array kompatibel ist.

InvalidOperationException

value implementiert nicht die IComparable-Schnittstelle, und bei der Suche wird ein Element gefunden, das die IComparable-Schnittstelle nicht implementiert.

Diese Methode unterstützt keine Suchen von Arrays, die negative Indizes enthalten. arraymuss vor dem Aufrufen dieser Methode sortiert werden.

Wenn die Array enthält keinen den angegebenen Wert gibt die Methode eine negative ganze Zahl zurück. Sie können die bitweiser Komplementoperator anwenden (~ in c# Not in Visual Basic) auf das Ergebnis negativ, um einen Index zu erzeugen. Wenn dieser Index einer ist größer als die obere Grenze des Arrays, es sind keine Elemente größer als value im Array. Andernfalls ist der Index des ersten Elements, das größer ist als value.

Entweder value oder jedes Element des array implementieren müssen die IComparable -Schnittstelle, die für Vergleiche verwendet wird. Die Elemente der array muss bereits in das Erhöhen des Werts gemäß der Sortierreihenfolge von definierten sortiert werden die IComparable Implementierung; anderenfalls das Ergebnis möglicherweise nicht korrekt.

System_CAPS_noteHinweis

Wennvalue implementiert nicht die IComparable Schnittstelle, die Elemente der array nicht getestet werden IComparable vor Beginn der Suche. Eine Ausnahme wird ausgelöst, wenn die Suche ein Element gefunden wird, die nicht implementiert IComparable.

Doppelte Elemente sind zulässig. Wenn die Array enthält mehr als ein Element gleich value, die Methode gibt den Index nur ein vorkommen, aber nicht unbedingt das erste Schema zurück.

nullkann mit anderen Verweistypen immer verglichen werden. Daher geben Vergleiche mit null eine Ausnahme nicht generiert.

System_CAPS_noteHinweis

   Für jedes Element getestet value übergeben wird, an die entsprechende IComparable -Implementierung, auch wenn value ist null. D. h. die IComparable Implementierung bestimmt, wie ein angegebenes Element zu vergleicht null.

Diese Methode ist eine O (Log n)-Vorgang, in dem n ist die Length von array.

Im folgenden Codebeispiel wird veranschaulicht, wie BinarySearch zum Suchen eines bestimmten Objekts in ein Array.

System_CAPS_noteHinweis

Das Array wird mit seiner Elemente in aufsteigender Reihenfolge erstellt. Die BinarySearch Methode erfordert das Array in aufsteigender Reihenfolge sortiert werden.

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.

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: