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

List<T>.BinarySearch-Methode: (T)

 

Veröffentlicht: Oktober 2016

Durchsucht mithilfe des Standardcomparers die gesamte sortierte List<T> nach einem Element und gibt den nullbasierten Index des Elements zurück.

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

public int BinarySearch(
	T item
)

Parameter

item
Type: T

Das zu suchende Objekt. Der Wert kann für Verweistypen null sein.

Rückgabewert

Type: System.Int32

Der nullbasierte Index von item in der sortierten List<T>, sofern item gefunden wird, andernfalls eine negative Zahl, die das bitweise Komplement des Indexes des nächsten Elements darstellt, das größer als item ist, oder, wenn kein größeres Element vorhanden ist, das bitweise Komplement von Count.

Exception Condition
InvalidOperationException

Der Standardcomparer Comparer<T>.Default kann keine Implementierung der generischen IComparable<T>-Schnittstelle oder der IComparable-Schnittstelle für den Typ T finden.

Diese Methode verwendet den Standardvergleich Comparer<T>.Default für Typ T die Reihenfolge von Listenelementen zu bestimmen. Die Comparer<T>.Default -Eigenschaft überprüft, ob der Typ T implementiert die IComparable<T> generische Schnittstelle und verwendet diese Implementierung, sofern verfügbar. Wenn dies nicht der Fall ist, Comparer<T>.Default überprüft, ob der Typ T implementiert die IComparable Schnittstelle. Wenn Typ T implementiert nicht die beiden Schnittstellen, Comparer<T>.Default löst eine InvalidOperationException.

Die List<T> muss entsprechend die Vergleichs-Implementierung; bereits sortiert werden, andernfalls ist das Ergebnis falsch.

Vergleichen von null mit einem beliebigen Verweistyp ist zulässig und löst keine Ausnahme aus, bei Verwendung der IComparable<T> generische Schnittstelle. Beim Sortieren von null gilt als kleiner als jedes andere Objekt.

Wenn die List<T> enthält mehr als ein Element mit dem gleichen Wert, gibt die Methode nur einen vorkommen und eine vorkommen, nicht notwendigerweise die erste Instanz zurückgeben kann.

Wenn die List<T> den angegebenen Wert nicht enthält die Methode eine negative ganze Zahl zurückgegeben. Sie können die bitweise Komplementoperation (~) anwenden, auf diese negative ganze Zahl, um den Index des ersten Elements abzurufen, die den zu suchenden Wert größer ist. Beim Einfügen des Werts in der List<T>, dieser Index sollte als Einfügemarke verwendet werden, um die Sortierreihenfolge beizubehalten.

Diese Methode ist eine O(log n)-Operation, wobei n ist die Anzahl der Elemente im Bereich.

Das folgende Beispiel veranschaulicht die Sort() Überladung und BinarySearch(T) Überladung. Ein List<T> von Zeichenfolgen wird erstellt und mit vier Zeichenfolgen in keiner bestimmten Reihenfolge aufgefüllt. Die Liste wird angezeigt, sortiert und erneut angezeigt.

Die BinarySearch(T) Überladung wird dann zum Suchen nach zwei Zeichenfolgen, die nicht in der Liste sind und die Insert -Methode verwendet, um diese einfügen. Der Rückgabewert von der BinarySearch(T) -Methode ist in jedem Fall negativ, da die Zeichenfolgen nicht in der Liste enthalten sind. Das bitweise Komplement (den ~-Operator in c# und Visual C++ Xor -1 in Visual Basic) dieser negativen Zahl wird der Index des ersten Elements in der Liste, die größer als die Suchzeichenfolge, und durch Einfügen an dieser Stelle wird die Sortierreihenfolge beibehalten. Die zweite Suchzeichenfolge ist größer als ein Element in der Liste, daher ist die Position der Einfügemarke am Ende der Liste.

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Pachycephalosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort");
        dinosaurs.Sort();

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch and Insert \"Coelophysis\":");
        int index = dinosaurs.BinarySearch("Coelophysis");
        if (index < 0)
        {
            dinosaurs.Insert(~index, "Coelophysis");
        }

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch and Insert \"Tyrannosaurus\":");
        index = dinosaurs.BinarySearch("Tyrannosaurus");
        if (index < 0)
        {
            dinosaurs.Insert(~index, "Tyrannosaurus");
        }

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Deinonychus

Sort

Amargasaurus
Deinonychus
Mamenchisaurus
Pachycephalosaurus

BinarySearch and Insert "Coelophysis":

Amargasaurus
Coelophysis
Deinonychus
Mamenchisaurus
Pachycephalosaurus

BinarySearch and Insert "Tyrannosaurus":

Amargasaurus
Coelophysis
Deinonychus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus
 */

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
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: