ArrayList.BinarySearch Methode

Definition

Verwendet einen binären Suchalgorithmus, um ein bestimmtes Element in der sortierten ArrayList oder einem Teil davon zu finden.

Überlädt

Name Beschreibung
BinarySearch(Object)

Durchsucht die gesamte Sortierung ArrayList nach einem Element mithilfe des Standardvergleichs und gibt den nullbasierten Index des Elements zurück.

BinarySearch(Object, IComparer)

Durchsucht die gesamte Sortierung ArrayList nach einem Element mithilfe des angegebenen Vergleichs und gibt den nullbasierten Index des Elements zurück.

BinarySearch(Int32, Int32, Object, IComparer)

Durchsucht einen Bereich von Elementen in der Sortierung ArrayList nach einem Element mithilfe des angegebenen Vergleichs und gibt den nullbasierten Index des Elements zurück.

BinarySearch(Object)

Durchsucht die gesamte Sortierung ArrayList nach einem Element mithilfe des Standardvergleichs und gibt den nullbasierten Index des Elements zurück.

public:
 virtual int BinarySearch(System::Object ^ value);
public virtual int BinarySearch(object value);
abstract member BinarySearch : obj -> int
override this.BinarySearch : obj -> int
Public Overridable Function BinarySearch (value As Object) As Integer

Parameter

value
Object

Der Object zu findende Der Wert kann sein null.

Gibt zurück

Der nullbasierte Index des value sortierten ArrayList, falls value gefunden wird; andernfalls eine negative Zahl, die die bitweise Ergänzung des Index des nächsten Elements ist, die größer value als oder, wenn kein größeres Element vorhanden ist, die bitweise Ergänzung von Count.

Ausnahmen

Weder noch value die Elemente der Implementierung der ArrayListIComparable Schnittstelle.

value ist nicht vom gleichen Typ wie die Elemente der ArrayList.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie ein bestimmtes Objekt in der ArrayListDatei suchenBinarySearch.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList. BinarySearch requires
      // a sorted ArrayList.
      ArrayList myAL = new ArrayList();
      for ( int i = 0; i <= 4; i++ )
         myAL.Add( i*2 );

      // Displays the ArrayList.
      Console.WriteLine( "The int ArrayList contains the following:" );
      PrintValues( myAL );

      // Locates a specific object that does not exist in the ArrayList.
      Object myObjectOdd = 3;
      FindMyObject( myAL, myObjectOdd );

      // Locates an object that exists in the ArrayList.
      Object myObjectEven = 6;
      FindMyObject( myAL, myObjectEven );
   }

   public static void FindMyObject( ArrayList myList, Object myObject )  {
      int myIndex=myList.BinarySearch( 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( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The int ArrayList contains the following:
   0   2   4   6   8
The object to search for (3) is not found. The next larger object is at index 2.
The object to search for (6) is at index 3.
*/
Imports System.Collections

Public Class SamplesArrayList    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new ArrayList. BinarySearch requires
        ' a sorted ArrayList.
        Dim myAL As New ArrayList()
        Dim i As Integer
        For i = 0 To 4
            myAL.Add(i * 2)
        Next i 

        ' Displays the ArrayList.
        Console.WriteLine("The Int32 ArrayList contains the following:")
        PrintValues(myAL)
        
        ' Locates a specific object that does not exist in the ArrayList.
        Dim myObjectOdd As Object = 3
        FindMyObject(myAL, myObjectOdd)
        
        ' Locates an object that exists in the ArrayList.
        Dim myObjectEven As Object = 6
        FindMyObject(myAL, myObjectEven)
    End Sub    
    
    Public Shared Sub FindMyObject(myList As ArrayList, myObject As Object)
        Dim myIndex As Integer = myList.BinarySearch(myObject)
        If myIndex < 0 Then
            Console.WriteLine("The object to search for ({0}) is not found. " _
               + "The next larger object is at index {1}.", myObject, _
               Not myIndex)
        Else
            Console.WriteLine("The object to search for ({0}) is at index " _
               + "{1}.", myObject, myIndex)
        End If
    End Sub
     
    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub
    
End Class

' This code produces the following output.
' 
' The Int32 ArrayList contains the following:
'     0    2    4    6    8
' The object to search for (3) is not found. The next larger object is at index 2.
' The object to search for (6) is at index 3.

Hinweise

Der value Parameter und jedes Element der ArrayList Muss die IComparable Schnittstelle implementieren, die für Vergleiche verwendet wird. Die Elemente des ArrayList Elements müssen bereits nach der sortierreihenfolge sortiert werden, die durch die IComparable Implementierung definiert ist. Andernfalls kann das Ergebnis falsch sein.

Der Vergleich null mit einem beliebigen Typ ist zulässig und generiert bei Verwendung IComparablekeine Ausnahme. Bei der Sortierung gilt dies null als kleiner als jedes andere Objekt.

Wenn das ArrayList Element mehrere Elemente mit demselben Wert enthält, gibt die Methode nur eines der Vorkommen zurück, und es kann eines der Vorkommen zurückgeben, nicht unbedingt die erste.

Wenn der ArrayList angegebene Wert nicht enthalten ist, gibt die Methode eine negative ganze Zahl zurück. Sie können die bitweise Ergänzungsoperation (~) auf diese negative ganze Zahl anwenden, um den Index des ersten Elements abzurufen, das größer als der Suchwert ist. Beim Einfügen des Werts in den ArrayListIndex sollte dieser Index als Einfügemarke verwendet werden, um die Sortierreihenfolge beizubehalten.

Bei dieser Methode handelt es sich um einen Vorgang, bei dem O(log n) es sich um einen n Vorgang handeltCount.

Weitere Informationen

Gilt für:

BinarySearch(Object, IComparer)

Durchsucht die gesamte Sortierung ArrayList nach einem Element mithilfe des angegebenen Vergleichs und gibt den nullbasierten Index des Elements zurück.

public:
 virtual int BinarySearch(System::Object ^ value, System::Collections::IComparer ^ comparer);
public virtual int BinarySearch(object value, System.Collections.IComparer comparer);
abstract member BinarySearch : obj * System.Collections.IComparer -> int
override this.BinarySearch : obj * System.Collections.IComparer -> int
Public Overridable Function BinarySearch (value As Object, comparer As IComparer) As Integer

Parameter

value
Object

Der Object zu findende Der Wert kann sein null.

comparer
IComparer

Die IComparer Implementierung, die beim Vergleichen von Elementen verwendet werden soll.

-oder-

null um den Standardvergleicher zu verwenden, der die IComparable Implementierung der einzelnen Elemente ist.

Gibt zurück

Der nullbasierte Index des value sortierten ArrayList, falls value gefunden wird; andernfalls eine negative Zahl, die die bitweise Ergänzung des Index des nächsten Elements ist, die größer value als oder, wenn kein größeres Element vorhanden ist, die bitweise Ergänzung von Count.

Ausnahmen

comparer ist null und weder value die Elemente der ArrayList Implementierung der IComparable Schnittstelle.

comparer ist null und value ist nicht vom gleichen Typ wie die Elemente der ArrayList.

Beispiele

Im folgenden Beispiel wird ein ArrayList farbiges Tier erstellt. Die bereitgestellte Funktion IComparer führt den Zeichenfolgenvergleich für die binäre Suche aus. Die Ergebnisse einer iterativen Suche und einer binären Suche werden angezeigt.

using System;
using System.Collections;

public class SimpleStringComparer : IComparer
{
    int IComparer.Compare(object x, object y)
    {
        string cmpstr = (string)x;
        return cmpstr.CompareTo((string)y);
    }
}

public class MyArrayList : ArrayList
{
    public static void Main()
    {
        // Creates and initializes a new ArrayList.
        MyArrayList coloredAnimals = new MyArrayList();

        coloredAnimals.Add("White Tiger");
        coloredAnimals.Add("Pink Bunny");
        coloredAnimals.Add("Red Dragon");
        coloredAnimals.Add("Green Frog");
        coloredAnimals.Add("Blue Whale");
        coloredAnimals.Add("Black Cat");
        coloredAnimals.Add("Yellow Lion");

        // BinarySearch requires a sorted ArrayList.
        coloredAnimals.Sort();

        // Compare results of an iterative search with a binary search
        int index = coloredAnimals.IterativeSearch("White Tiger");
        Console.WriteLine("Iterative search, item found at index: {0}", index);

        index = coloredAnimals.BinarySearch("White Tiger", new SimpleStringComparer());
        Console.WriteLine("Binary search, item found at index:    {0}", index);
    }

    public int IterativeSearch(object finditem)
    {
        int index = -1;

        for (int i = 0; i < this.Count; i++)
        {
            if (finditem.Equals(this[i]))
            {
                index = i;
                break;
            }
        }
        return index;
    }
}
//
// This code produces the following output.
//
// Iterative search, item found at index: 5
// Binary search, item found at index:    5
//
Imports System.Collections

Public Class SimpleStringComparer
    Implements IComparer

    Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
          Dim cmpstr As String = CType(x, String)
          Return cmpstr.CompareTo(CType(y, String))
    End Function
End Class

Public Class MyArrayList
    Inherits ArrayList

    Public Shared Sub Main()
        ' Creates and initializes a new ArrayList.
        Dim coloredAnimals As New MyArrayList()

        coloredAnimals.Add("White Tiger")
        coloredAnimals.Add("Pink Bunny")
        coloredAnimals.Add("Red Dragon")
        coloredAnimals.Add("Green Frog")
        coloredAnimals.Add("Blue Whale")
        coloredAnimals.Add("Black Cat")
        coloredAnimals.Add("Yellow Lion")

        ' BinarySearch requires a sorted ArrayList.
        coloredAnimals.Sort()

        ' Compare results of an iterative search with a binary search
        Dim index As Integer = coloredAnimals.IterativeSearch("White Tiger")
        Console.WriteLine("Iterative search, item found at index: {0}", index)

        index = coloredAnimals.BinarySearch("White Tiger", New SimpleStringComparer())
        Console.WriteLine("Binary search, item found at index:    {0}", index)
    End Sub

    Public Function IterativeSearch(finditem As Object) As Integer
        Dim index As Integer = -1

        For i As Integer = 0 To MyClass.Count - 1
            If finditem.Equals(MyClass.Item(i))
                index = i
                Exit For
            End If
        Next i
        Return index
    End Function
End Class
'
' This code produces the following output.
'
' Iterative search, item found at index: 5
' Binary search, item found at index:    5
'

Hinweise

Der Comparer passt an, wie die Elemente verglichen werden. Sie können z. B. eine CaseInsensitiveComparer Instanz als Vergleichsinstanz verwenden, um Zeichenfolgensuchen ohne Groß-/Kleinschreibung durchzuführen.

Wenn comparer angegeben, werden die Elemente des ArrayList Elements mit dem angegebenen Wert mithilfe der angegebenen IComparer Implementierung verglichen. Die Elemente des ArrayList Elements müssen bereits nach der sortierreihenfolge sortiert werden, die definiert ist comparer; andernfalls kann das Ergebnis falsch sein.

Ist comparer dies nullder Fall, erfolgt der Vergleich mithilfe der IComparable vom Element selbst oder durch den angegebenen Wert bereitgestellten Implementierung. Die Elemente des ArrayList Elements müssen bereits nach der sortierreihenfolge sortiert werden, die durch die IComparable Implementierung definiert ist. Andernfalls kann das Ergebnis falsch sein.

Der Vergleich null mit einem beliebigen Typ ist zulässig und generiert bei Verwendung IComparablekeine Ausnahme. Bei der Sortierung gilt dies null als kleiner als jedes andere Objekt.

Wenn das ArrayList Element mehrere Elemente mit demselben Wert enthält, gibt die Methode nur eines der Vorkommen zurück, und es kann eines der Vorkommen zurückgeben, nicht unbedingt die erste.

Wenn der ArrayList angegebene Wert nicht enthalten ist, gibt die Methode eine negative ganze Zahl zurück. Sie können die bitweise Ergänzungsoperation (~) auf diese negative ganze Zahl anwenden, um den Index des ersten Elements abzurufen, das größer als der Suchwert ist. Beim Einfügen des Werts in den ArrayListIndex sollte dieser Index als Einfügemarke verwendet werden, um die Sortierreihenfolge beizubehalten.

Bei dieser Methode handelt es sich um einen Vorgang, bei dem O(log n) es sich um einen n Vorgang handeltCount.

Weitere Informationen

Gilt für:

BinarySearch(Int32, Int32, Object, IComparer)

Durchsucht einen Bereich von Elementen in der Sortierung ArrayList nach einem Element mithilfe des angegebenen Vergleichs und gibt den nullbasierten Index des Elements zurück.

public:
 virtual int BinarySearch(int index, int count, System::Object ^ value, System::Collections::IComparer ^ comparer);
public virtual int BinarySearch(int index, int count, object value, System.Collections.IComparer comparer);
abstract member BinarySearch : int * int * obj * System.Collections.IComparer -> int
override this.BinarySearch : int * int * obj * System.Collections.IComparer -> int
Public Overridable Function BinarySearch (index As Integer, count As Integer, value As Object, comparer As IComparer) As Integer

Parameter

index
Int32

Der nullbasierte Startindex des zu durchsuchenden Bereichs.

count
Int32

Die Länge des zu durchsuchenden Bereichs.

value
Object

Der Object zu findende Der Wert kann sein null.

comparer
IComparer

Die IComparer Implementierung, die beim Vergleichen von Elementen verwendet werden soll.

-oder-

null um den Standardvergleicher zu verwenden, der die IComparable Implementierung der einzelnen Elemente ist.

Gibt zurück

Der nullbasierte Index des value sortierten ArrayList, falls value gefunden wird; andernfalls eine negative Zahl, die die bitweise Ergänzung des Index des nächsten Elements ist, die größer value als oder, wenn kein größeres Element vorhanden ist, die bitweise Ergänzung von Count.

Ausnahmen

index und count geben Sie keinen gültigen Bereich in der ArrayList.

-oder-

comparer ist null und weder value die Elemente der ArrayList Implementierung der IComparable Schnittstelle.

comparer ist null und value ist nicht vom gleichen Typ wie die Elemente der ArrayList.

index ist kleiner als 0 (null).

-oder-

count ist kleiner als 0 (null).

Hinweise

Der Comparer passt an, wie die Elemente verglichen werden. Sie können z. B. eine CaseInsensitiveComparer Instanz als Vergleichsinstanz verwenden, um Zeichenfolgensuchen ohne Groß-/Kleinschreibung durchzuführen.

Wenn comparer angegeben, werden die Elemente des ArrayList Elements mit dem angegebenen Wert mithilfe der angegebenen IComparer Implementierung verglichen. Die Elemente des ArrayList Elements müssen bereits nach der sortierreihenfolge sortiert werden, die definiert ist comparer; andernfalls kann das Ergebnis falsch sein.

Ist comparer dies nullder Fall, erfolgt der Vergleich mithilfe der IComparable vom Element selbst oder durch den angegebenen Wert bereitgestellten Implementierung. Die Elemente des ArrayList Elements müssen bereits nach der sortierreihenfolge sortiert werden, die durch die IComparable Implementierung definiert ist. Andernfalls kann das Ergebnis falsch sein.

Der Vergleich null mit einem beliebigen Typ ist zulässig und generiert bei Verwendung IComparablekeine Ausnahme. Bei der Sortierung gilt dies null als kleiner als jedes andere Objekt.

Wenn das ArrayList Element mehrere Elemente mit demselben Wert enthält, gibt die Methode nur eines der Vorkommen zurück, und es kann eines der Vorkommen zurückgeben, nicht unbedingt die erste.

Wenn der ArrayList angegebene Wert nicht enthalten ist, gibt die Methode eine negative ganze Zahl zurück. Sie können die bitweise Ergänzungsoperation (~) auf diese negative ganze Zahl anwenden, um den Index des ersten Elements abzurufen, das größer als der Suchwert ist. Beim Einfügen des Werts in den ArrayListIndex sollte dieser Index als Einfügemarke verwendet werden, um die Sortierreihenfolge beizubehalten.

Bei dieser Methode handelt es sich um einen Vorgang, bei dem O(log n) es sich um einen n Vorgang handeltcount.

Weitere Informationen

Gilt für: