Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Array.BinarySearch-Methode (Array, Object)

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

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

public static int BinarySearch(
	Array array,
	Object value
)

Parameter

array
Typ: System.Array
Das zu durchsuchende sortierte eindimensionale Array.
value
Typ: System.Object
Das Objekt, nach dem gesucht werden soll.

Rückgabewert

Typ: System.Int32
Der Index des angegebenen value im angegebenen array, sofern value gefunden wurde. Wenn value nicht gefunden wurde und value kleiner als ein oder mehr Elemente in array ist, eine negative Zahl, die das bitweise Komplement des Index des ersten Elements darstellt, das größer als value ist. Eine negative Zahl, die das bitweise Komplement von Index des letzten Elements + 1 darstellt, wenn value nicht gefunden wurde und value größer als alle Elemente in array ist.

AusnahmeBedingung
ArgumentNullException

array ist null.

RankException

array ist mehrdimensional.

ArgumentException

Der Typ von value ist nicht mit den Elementen von array kompatibel.

InvalidOperationException

value implementiert die IComparable-Schnittstelle nicht, und der Suchvorgang findet ein Element, das die IComparable-Schnittstelle nicht implementiert.

Diese Methode unterstützt das Suchen von Arrays, die negative Indizes enthalten, nicht. array muss vor dem Aufrufen dieser Methode sortiert werden.

Wenn Array den angegebenen Wert nicht enthält, gibt die Methode eine negative ganze Zahl zurück. Sie können den bitweisen Komplementierungsoperator anwenden (| in C#, Not in Visual Basic) dem negativen Ergebnis, um eines Indexes zu erzeugen. Wenn dieser Index einer ist, der das Array mehr als die Obergrenze ist, gibt es keine Elemente, die im Array größer sind als value. Andernfalls ist der Index des ersten Elements größer als value.

value oder alle Elemente von array müssen die für Vergleiche verwendete IComparable-Schnittstelle implementieren. Die Elemente von array müssen bereits gemäß der durch die IComparable-Implementierung definierten Sortierreihenfolge aufsteigend sortiert werden, da ansonsten das Ergebnis möglicherweise falsch ist.

HinweisHinweis

Wenn value die IComparable-Schnittstelle nicht implementiert, werden die Elemente in array vor Beginn der Suche nicht auf IComparable geprüft. Eine Ausnahme wird ausgelöst, wenn die Suche ein Element findet, das IComparable nicht implementiert.

Mehrfach vorkommende Elemente sind zulässig. Wenn Array mehrere Elemente enthält, die gleich value sind, gibt die Methode nur den Index eines Vorkommens zurück, das nicht unbedingt das erste sein muss.

null kann immer mit beliebigen Referenztypen verglichen werden. Daher generieren Vergleiche mit null keine Ausnahme.

HinweisHinweis

   Bei jedem geprüften Element wird value an die entsprechende IComparable-Implementierung übergeben, auch wenn valuenull ist. Das heißt, die IComparable-Implementierung bestimmt, wie ein bestimmtes Element mit null verglichen wird.

Diese Methode ist eine O(logn)-Operation, wobei n die Length von array ist.

Im folgenden Codebeispiel wird veranschaulicht, wie BinarySearch für die Suche nach einem bestimmten Objekt in einem Array verwendet wird.

HinweisHinweis

Das Array wird mit seinen Elementen in aufsteigender Sortierreihenfolge erstellt. Die BinarySearch-Methode verlangt eine Sortierung des Arrays in aufsteigender Reihenfolge.


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.


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft