Array.BinarySearch Methode

Definitie

Zoekt in een eendimensionale sortering Array naar een waarde met behulp van een binair zoekalgoritmen.

Overloads

Name Description
BinarySearch(Array, Object)

Zoekt in een hele eendimensionale gesorteerde matrix naar een specifiek element, met behulp van de IComparable interface die wordt geïmplementeerd door elk element van de matrix en door het opgegeven object.

BinarySearch(Array, Object, IComparer)

Zoekt in een hele eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer interface.

BinarySearch(Array, Int32, Int32, Object)

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix voor een waarde, met behulp van de IComparable interface die wordt geïmplementeerd door elk element van de matrix en door de opgegeven waarde.

BinarySearch(Array, Int32, Int32, Object, IComparer)

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer interface.

BinarySearch<T>(T[], T)

Zoekt in een hele eendimensionale gesorteerde matrix naar een specifiek element met behulp van de IComparable<T> algemene interface die wordt geïmplementeerd door elk element van het Array en het opgegeven object.

BinarySearch<T>(T[], T, IComparer<T>)

Zoekt in een hele eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer<T> algemene interface.

BinarySearch<T>(T[], Int32, Int32, T)

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de IComparable<T> algemene interface die wordt geïmplementeerd door elk element van de Array en de opgegeven waarde.

BinarySearch<T>(T[], Int32, Int32, T, IComparer<T>)

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer<T> algemene interface.

BinarySearch(Array, Object)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een hele eendimensionale gesorteerde matrix naar een specifiek element, met behulp van de IComparable interface die wordt geïmplementeerd door elk element van de matrix en door het opgegeven object.

public:
 static int BinarySearch(Array ^ array, System::Object ^ value);
public static int BinarySearch(Array array, object value);
public static int BinarySearch(Array array, object? value);
static member BinarySearch : Array * obj -> int
Public Shared Function BinarySearch (array As Array, value As Object) As Integer

Parameters

array
Array

De gesorteerde eendimensionale Array zoekopdracht.

value
Object

Het object waarnaar moet worden gezocht.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

array is multidimensionaal.

value is van een type dat niet compatibel is met de elementen van array.

value implementeert de IComparable interface niet en de zoekfunctie ondervindt een element dat de IComparable interface niet implementeert.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u BinarySearch een specifiek object in een Arrayobject kunt vinden.

Note

De matrix wordt gemaakt met de bijbehorende elementen in oplopende sorteervolgorde. Voor BinarySearch de methode moet de matrix in oplopende volgorde worden gesorteerd.

open System

let printValues (myArray: Array) =
    let mutable i = 0
    let cols = myArray.GetLength(myArray.Rank - 1)
    for item in myArray do
        if i < cols then
            i <- i + 1
        else
            printfn ""
            i <- 1;
        printf $"\t{item}"
    printfn ""

let findMyObject (myArr: Array) (myObject: obj) =
    let myIndex = Array.BinarySearch(myArr, myObject)
    if myIndex < 0 then
        printfn $"The object to search for ({myObject}) is not found. The next larger object is at index {~~~myIndex}."
    else
        printfn $"The object to search for ({myObject}) is at index {myIndex}."

// Creates and initializes a new Array.
let myIntArray = [| 8; 2; 6; 3; 7 |]

// Do the required sort first
Array.Sort myIntArray

// Displays the values of the Array.
printfn "The int array contains the following:"
printValues myIntArray

// Locates a specific object that does not exist in the Array.
let myObjectOdd: obj = 1
findMyObject myIntArray myObjectOdd 

// Locates an object that exists in the Array.
let myObjectEven: obj = 6
findMyObject myIntArray myObjectEven
       
// This code produces the following output:
//     The int 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.
using System;

public class SamplesArray
{
    public static void Main()
    {
        // Creates and initializes a new Array.
        Array myIntArray = Array.CreateInstance(typeof(int), 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 int 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 int 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.
Public Class SamplesArray
    Public Shared Sub Main()
        ' Creates and initializes a new Array.
        Dim myIntArray As Array = Array.CreateInstance( GetType(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.
        Dim myObjectOdd As Object = 1
        FindMyObject(myIntArray, myObjectOdd)

        ' Locates an object that exists in the Array.
        Dim myObjectEven As Object = 6
        FindMyObject(myIntArray, myObjectEven)
    End Sub

    Public Shared Sub FindMyObject(myArr As Array, myObject As Object)
        Dim myIndex As Integer = Array.BinarySearch(myArr, 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(myArr As Array)
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength( myArr.Rank - 1 )
        For Each o As Object In myArr
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write( vbTab + "{0}", o)
        Next o
        Console.WriteLine()
    End Sub
End Class
' 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.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de Array opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index groter is dan de bovengrens van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

Of value elk element van array moet de IComparable interface implementeren, die wordt gebruikt voor vergelijkingen. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Note

Alsvalue de IComparable interface niet wordt geïmplementeerd, worden de elementen van array de interface niet getest IComparable voordat de zoekopdracht begint. Er wordt een uitzondering gegenereerd als de zoekopdracht een element tegenkomt dat niet wordt geïmplementeerd IComparable.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log n)-bewerking, waarbij n de Length van array.

Zie ook

Van toepassing op

BinarySearch(Array, Object, IComparer)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een hele eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer interface.

public:
 static int BinarySearch(Array ^ array, System::Object ^ value, System::Collections::IComparer ^ comparer);
public static int BinarySearch(Array array, object value, System.Collections.IComparer comparer);
public static int BinarySearch(Array array, object? value, System.Collections.IComparer? comparer);
static member BinarySearch : Array * obj * System.Collections.IComparer -> int
Public Shared Function BinarySearch (array As Array, value As Object, comparer As IComparer) As Integer

Parameters

array
Array

De gesorteerde eendimensionale Array zoekopdracht.

value
Object

Het object waarnaar moet worden gezocht.

comparer
IComparer

De IComparer implementatie die moet worden gebruikt bij het vergelijken van elementen.

– of –

null om de IComparable implementatie van elk element te gebruiken.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

array is multidimensionaal.

comparer is null, en value is van een type dat niet compatibel is met de elementen van array.

comparer is null, value implementeert de IComparable interface niet en de zoekfunctie ondervindt een element dat de IComparable interface niet implementeert.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de Array opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index groter is dan de bovengrens van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

De vergelijkingsfunctie past aan hoe de elementen worden vergeleken. U kunt bijvoorbeeld een System.Collections.CaseInsensitiveComparer als vergelijkingsfunctie gebruiken om hoofdlettergevoelige tekenreekszoekopdrachten uit te voeren.

Als comparer dat niet nullhet is, worden de elementen array vergeleken met de opgegeven waarde met behulp van de opgegeven IComparer implementatie. De elementen van array moeten al worden gesorteerd in toenemende waarde volgens de sorteervolgorde die is gedefinieerd door comparer; anders kan het resultaat onjuist zijn.

Alscomparer dat het is null, wordt de vergelijking uitgevoerd met behulp van de IComparable implementatie die wordt geleverd door het element zelf of door de opgegeven waarde. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Note

Als comparer dat het geval is null en value de IComparable interface niet implementeert, worden de elementen van array niet getest voordat IComparable de zoekopdracht begint. Er wordt een uitzondering gegenereerd als de zoekopdracht een element tegenkomt dat niet wordt geïmplementeerd IComparable.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log n)-bewerking, waarbij n de Length van array.

Zie ook

Van toepassing op

BinarySearch(Array, Int32, Int32, Object)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix voor een waarde, met behulp van de IComparable interface die wordt geïmplementeerd door elk element van de matrix en door de opgegeven waarde.

public:
 static int BinarySearch(Array ^ array, int index, int length, System::Object ^ value);
public static int BinarySearch(Array array, int index, int length, object value);
public static int BinarySearch(Array array, int index, int length, object? value);
static member BinarySearch : Array * int * int * obj -> int
Public Shared Function BinarySearch (array As Array, index As Integer, length As Integer, value As Object) As Integer

Parameters

array
Array

De gesorteerde eendimensionale Array zoekopdracht.

index
Int32

De beginindex van het bereik om te zoeken.

length
Int32

De lengte van het bereik om te zoeken.

value
Object

Het object waarnaar moet worden gezocht.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

array is multidimensionaal.

index is kleiner dan de ondergrens van array.

– of –

length is kleiner dan nul.

index en length geef geen geldig bereik op in array.

– of –

value is van een type dat niet compatibel is met de elementen van array.

value implementeert de IComparable interface niet en de zoekfunctie ondervindt een element dat de IComparable interface niet implementeert.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de Array opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index groter is dan de bovengrens van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

Of value elk element van array moet de IComparable interface implementeren, die wordt gebruikt voor vergelijkingen. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Note

Als value de IComparable interface niet wordt geïmplementeerd, worden de elementen van array de interface niet getest IComparable voordat de zoekopdracht begint. Er wordt een uitzondering gegenereerd als de zoekopdracht een element tegenkomt dat niet wordt geïmplementeerd IComparable.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log)-nbewerking, waarbij n .length

Zie ook

Van toepassing op

BinarySearch(Array, Int32, Int32, Object, IComparer)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer interface.

public:
 static int BinarySearch(Array ^ array, int index, int length, System::Object ^ value, System::Collections::IComparer ^ comparer);
public static int BinarySearch(Array array, int index, int length, object value, System.Collections.IComparer comparer);
public static int BinarySearch(Array array, int index, int length, object? value, System.Collections.IComparer? comparer);
static member BinarySearch : Array * int * int * obj * System.Collections.IComparer -> int
Public Shared Function BinarySearch (array As Array, index As Integer, length As Integer, value As Object, comparer As IComparer) As Integer

Parameters

array
Array

De gesorteerde eendimensionale Array zoekopdracht.

index
Int32

De beginindex van het bereik om te zoeken.

length
Int32

De lengte van het bereik om te zoeken.

value
Object

Het object waarnaar moet worden gezocht.

comparer
IComparer

De IComparer implementatie die moet worden gebruikt bij het vergelijken van elementen.

– of –

null om de IComparable implementatie van elk element te gebruiken.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

array is multidimensionaal.

index is kleiner dan de ondergrens van array.

– of –

length is kleiner dan nul.

index en length geef geen geldig bereik op in array.

– of –

comparer is null, en value is van een type dat niet compatibel is met de elementen van array.

comparer is null, value implementeert de IComparable interface niet en de zoekfunctie ondervindt een element dat de IComparable interface niet implementeert.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de Array opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index groter is dan de bovengrens van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

De vergelijkingsfunctie past aan hoe de elementen worden vergeleken. U kunt bijvoorbeeld een System.Collections.CaseInsensitiveComparer als vergelijkingsfunctie gebruiken om hoofdlettergevoelige tekenreekszoekopdrachten uit te voeren.

Als comparer dat niet nullhet is, worden de elementen array vergeleken met de opgegeven waarde met behulp van de opgegeven IComparer implementatie. De elementen van array moeten al worden gesorteerd in toenemende waarde volgens de sorteervolgorde die is gedefinieerd door comparer; anders kan het resultaat onjuist zijn.

Als comparer dat het is null, wordt de vergelijking uitgevoerd met behulp van de IComparable implementatie die wordt geleverd door het element zelf of door de opgegeven waarde. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Note

Als comparer dat het geval is null en value de IComparable interface niet implementeert, worden de elementen van array niet getest voordat IComparable de zoekopdracht begint. Er wordt een uitzondering gegenereerd als de zoekopdracht een element tegenkomt dat niet wordt geïmplementeerd IComparable.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; daarom genereren vergelijkingen met null geen uitzondering bij gebruik IComparable.

Note

Voor elk getest element wordt value de juiste IComparable implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log)-nbewerking, waarbij n .length

Zie ook

Van toepassing op

BinarySearch<T>(T[], T)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een hele eendimensionale gesorteerde matrix naar een specifiek element met behulp van de IComparable<T> algemene interface die wordt geïmplementeerd door elk element van het Array en het opgegeven object.

public:
generic <typename T>
 static int BinarySearch(cli::array <T> ^ array, T value);
public static int BinarySearch<T>(T[] array, T value);
static member BinarySearch : 'T[] * 'T -> int
Public Shared Function BinarySearch(Of T) (array As T(), value As T) As Integer

Type parameters

T

Het type van de elementen van de matrix.

Parameters

array
T[]

De gesorteerde eendimensionale, op nul gebaseerde Array zoekopdrachten.

value
T

Het object waarnaar moet worden gezocht.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

T implementeert de IComparable<T> algemene interface niet.

Voorbeelden

In het volgende codevoorbeeld ziet u de algemene overbelasting van de Sort<T>(T[]) methode en de algemene overbelasting van de BinarySearch<T>(T[], T) methode. Er wordt een matrix met tekenreeksen gemaakt, in geen bepaalde volgorde.

De matrix wordt weergegeven, gesorteerd en opnieuw weergegeven. Matrices moeten worden gesorteerd om de BinarySearch methode te kunnen gebruiken.

Note

De aanroepen naar de Sort en BinarySearch algemene methoden zien er niet anders uit dan aanroepen naar hun niet-generische tegenhangers, omdat Visual Basic, F#, C# en C++ het type van de algemene parameter afleiden van het type van het eerste argument. Als u de Ildasm.exe (IL Disassembler) gebruikt om de Microsoft tussentaal (MSIL) te onderzoeken, kunt u zien dat de algemene methoden worden aangeroepen.

De BinarySearch<T>(T[], T) algemene overbelasting van de methode wordt vervolgens gebruikt om te zoeken naar twee tekenreeksen, een tekenreeks die zich niet in de matrix bevindt en een tekenreeks. De matrix en de retourwaarde van de BinarySearch methode worden doorgegeven aan de ShowWhere algemene methode (de showWhere functie in het F#-voorbeeld), die de indexwaarde weergeeft als de tekenreeks wordt gevonden en anders vallen de elementen tussen de zoekreeks als deze zich in de matrix bevinden. De index is negatief als de tekenreeks zich niet in de matrix bevindt, dus de methode ShowWhere gebruikt de bitwise complement (de ~-operator in C#, de operator ~~~ in F#, Xor-1 in Visual Basic) om de index van het eerste element in de lijst te verkrijgen dat groter is dan de zoektekenreeks.

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

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

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

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

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */
open System

let showWhere (array: 'a []) index =
    if index < 0 then
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        let index = ~~~index

        printf "Not found. Sorts between: "

        if index = 0 then
            printf "beginning of array and "
        else
            printf $"{array[index - 1]} and "

        if index = array.Length then
            printfn "end of array."
        else
            printfn $"{array[index]}."
    else
        printfn $"Found at index {index}."

let dinosaurs =
    [| "Pachycephalosaurus"
       "Amargasaurus"
       "Tyrannosaurus"
       "Mamenchisaurus"
       "Deinonychus"
       "Edmontosaurus" |]

printfn ""
for dino in dinosaurs do
    printfn $"{dino}"

printfn "\nSort"
Array.Sort dinosaurs

printfn ""
for dino in dinosaurs do
    printfn $"{dino}"

printfn "\nBinarySearch for 'Coelophysis':"
let index = Array.BinarySearch(dinosaurs, "Coelophysis")
showWhere dinosaurs index

printfn "\nBinarySearch for 'Tyrannosaurus':"
Array.BinarySearch(dinosaurs, "Tyrannosaurus")
|> showWhere dinosaurs


// This code example produces the following output:
//
//     Pachycephalosaurus
//     Amargasaurus
//     Tyrannosaurus
//     Mamenchisaurus
//     Deinonychus
//     Edmontosaurus
//
//     Sort
//
//     Amargasaurus
//     Deinonychus
//     Edmontosaurus
//     Mamenchisaurus
//     Pachycephalosaurus
//     Tyrannosaurus
//
//     BinarySearch for 'Coelophysis':
//     Not found. Sorts between: Amargasaurus and Deinonychus.
//
//     BinarySearch for 'Tyrannosaurus':
//     Found at index 5.
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis")
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus")
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer) 

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If 

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If 
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Amargasaurus
'Deinonychus
'Edmontosaurus
'Mamenchisaurus
'Pachycephalosaurus
'Tyrannosaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Amargasaurus and Deinonychus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 5.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als array deze niet de opgegeven waarde bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index gelijk is aan de grootte van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

T moet de IComparable<T> algemene interface implementeren, die wordt gebruikt voor vergelijkingen. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable<T> implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable<T> implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable<T> implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log n)-bewerking, waarbij n de Length van array.

Zie ook

Van toepassing op

BinarySearch<T>(T[], T, IComparer<T>)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een hele eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer<T> algemene interface.

public:
generic <typename T>
 static int BinarySearch(cli::array <T> ^ array, T value, System::Collections::Generic::IComparer<T> ^ comparer);
public static int BinarySearch<T>(T[] array, T value, System.Collections.Generic.IComparer<T> comparer);
public static int BinarySearch<T>(T[] array, T value, System.Collections.Generic.IComparer<T>? comparer);
static member BinarySearch : 'T[] * 'T * System.Collections.Generic.IComparer<'T> -> int
Public Shared Function BinarySearch(Of T) (array As T(), value As T, comparer As IComparer(Of T)) As Integer

Type parameters

T

Het type van de elementen van de matrix.

Parameters

array
T[]

De gesorteerde eendimensionale, op nul gebaseerde Array zoekopdrachten.

value
T

Het object waarnaar moet worden gezocht.

comparer
IComparer<T>

De IComparer<T> implementatie die moet worden gebruikt bij het vergelijken van elementen.

– of –

null om de IComparable<T> implementatie van elk element te gebruiken.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

comparer is null, en value is van een type dat niet compatibel is met de elementen van array.

comparer is nullen T implementeert de IComparable<T> algemene interface niet

Voorbeelden

In het volgende voorbeeld ziet u de algemene overbelasting van de Sort<T>(T[], IComparer<T>) methode en de algemene overbelasting van de BinarySearch<T>(T[], T, IComparer<T>) methode.

Het codevoorbeeld definieert een alternatieve vergelijking voor tekenreeksen met de naam ReverseCompare, waarmee de algemene interface IComparer<string> (IComparer(Of String) in Visual Basic) wordt geïmplementeerd. De vergelijkingsfunctie roept de CompareTo(String) methode aan, waarbij de volgorde van de comparands wordt omgedraaid, zodat de tekenreeksen hoog-naar-laag sorteren in plaats van laag-naar-hoog.

De matrix wordt weergegeven, gesorteerd en opnieuw weergegeven. Matrices moeten worden gesorteerd om de BinarySearch methode te kunnen gebruiken.

Note

De aanroepen naar de Sort<T>(T[], IComparer<T>) en BinarySearch<T>(T[], T, IComparer<T>) algemene methoden zien er niet anders uit dan aanroepen naar hun niet-gegenereerde tegenhangers, omdat Visual Basic, C# en C++ het type van de algemene typeparameter afleiden uit het type van het eerste argument. Als u de Ildasm.exe (IL Disassembler) gebruikt om de Microsoft tussentaal (MSIL) te onderzoeken, kunt u zien dat de algemene methoden worden aangeroepen.

De BinarySearch<T>(T[], T, IComparer<T>) algemene overbelasting van de methode wordt vervolgens gebruikt om te zoeken naar twee tekenreeksen, een tekenreeks die zich niet in de matrix bevindt en een tekenreeks. De matrix en de retourwaarde van de BinarySearch<T>(T[], T, IComparer<T>) methode worden doorgegeven aan de ShowWhere algemene methode (de showWhere functie in het F#-voorbeeld), die de indexwaarde weergeeft als de tekenreeks wordt gevonden en anders vallen de elementen tussen de zoekreeks als deze zich in de matrix bevinden. De index is negatief als de tekenreeks niet n de matrix is, dus neemt de methode ShowWhere de bitsgewijze complement (de operator ~ in C#, de operator ~~~ in F#, Xor -1 in Visual Basic) om de index te verkrijgen van het eerste element in de lijst die groter is dan de zoektekenreeks.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

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

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs, rc);

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

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis", rc);
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc);
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */
open System
open System.Collections.Generic

type ReverseComparer() =
    interface IComparer<string> with
        member _.Compare(x, y) =
            // Compare y and x in reverse order.
            y.CompareTo x

let showWhere (array: 'a []) index =
    if index < 0 then
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        let index = ~~~index

        printf "Not found. Sorts between: "

        if index = 0 then
            printf "beginning of array and "
        else
            printf $"{array[index - 1]} and "

        if index = array.Length then
            printfn "end of array."
        else
            printfn $"{array[index]}."
    else
        printfn $"Found at index {index}."

let dinosaurs =
    [| "Pachycephalosaurus"
       "Amargasaurus"
       "Tyrannosaurus"
       "Mamenchisaurus"
       "Deinonychus"
       "Edmontosaurus" |]

printfn ""
for dino in dinosaurs do
    printfn $"{dino}"

let rc = ReverseComparer()

printfn "\nSort"
Array.Sort(dinosaurs, rc)

printfn ""
for dino in dinosaurs do
    printfn $"{dino}"

printfn "\nBinarySearch for 'Coelophysis':"
Array.BinarySearch(dinosaurs, "Coelophysis", rc)
|> showWhere dinosaurs

printfn "\nBinarySearch for 'Tyrannosaurus':"
Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc)
|> showWhere dinosaurs


// This code example produces the following output:
//     Pachycephalosaurus
//     Amargasaurus
//     Tyrannosaurus
//     Mamenchisaurus
//     Deinonychus
//     Edmontosaurus
//
//     Sort
//
//     Tyrannosaurus
//     Pachycephalosaurus
//     Mamenchisaurus
//     Edmontosaurus
//     Deinonychus
//     Amargasaurus
//
//     BinarySearch for 'Coelophysis':
//     Not found. Sorts between: Deinonychus and Amargasaurus.
//
//     BinarySearch for 'Tyrannosaurus':
//     Found at index 0.
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs, rc)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis", rc)
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc)
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer) 

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If 

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If 
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Tyrannosaurus
'Pachycephalosaurus
'Mamenchisaurus
'Edmontosaurus
'Deinonychus
'Amargasaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Deinonychus and Amargasaurus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 0.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de Array opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index gelijk is aan de grootte van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

De vergelijkingsfunctie past aan hoe de elementen worden vergeleken. U kunt bijvoorbeeld een System.Collections.CaseInsensitiveComparer als vergelijkingsfunctie gebruiken om hoofdlettergevoelige tekenreekszoekopdrachten uit te voeren.

Als comparer dat niet nullhet is, worden de elementen array vergeleken met de opgegeven waarde met behulp van de opgegeven IComparer<T> algemene interface-implementatie. De elementen van array moeten al worden gesorteerd in toenemende waarde volgens de sorteervolgorde die is gedefinieerd door comparer; anders kan het resultaat onjuist zijn.

Als comparer dat het is null, wordt de vergelijking uitgevoerd met behulp van de IComparable<T> algemene interface-implementatie die wordt geleverd door T. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable<T> implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Note

Als comparer dat het geval is null en value de IComparable<T> algemene interface niet implementeert, worden de elementen van array niet getest IComparable<T> voordat de zoekopdracht begint. Er wordt een uitzondering gegenereerd als de zoekopdracht een element tegenkomt dat niet wordt geïmplementeerd IComparable<T>.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable<T> implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable<T> implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log n)-bewerking, waarbij n de Length van array.

Zie ook

Van toepassing op

BinarySearch<T>(T[], Int32, Int32, T)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de IComparable<T> algemene interface die wordt geïmplementeerd door elk element van de Array en de opgegeven waarde.

public:
generic <typename T>
 static int BinarySearch(cli::array <T> ^ array, int index, int length, T value);
public static int BinarySearch<T>(T[] array, int index, int length, T value);
static member BinarySearch : 'T[] * int * int * 'T -> int
Public Shared Function BinarySearch(Of T) (array As T(), index As Integer, length As Integer, value As T) As Integer

Type parameters

T

Het type van de elementen van de matrix.

Parameters

array
T[]

De gesorteerde eendimensionale, op nul gebaseerde Array zoekopdrachten.

index
Int32

De beginindex van het bereik om te zoeken.

length
Int32

De lengte van het bereik om te zoeken.

value
T

Het object waarnaar moet worden gezocht.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

index is kleiner dan de ondergrens van array.

– of –

length is kleiner dan nul.

index en length geef geen geldig bereik op in array.

– of –

value is van een type dat niet compatibel is met de elementen van array.

T implementeert de IComparable<T> algemene interface niet.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de matrix de opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index gelijk is aan de grootte van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

T moet de IComparable<T> algemene interface implementeren, die wordt gebruikt voor vergelijkingen. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable<T> implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; Daarom genereren vergelijkingen met null geen uitzondering.

Note

Voor elk getest element wordt value de juiste IComparable<T> implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable<T> implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log)-nbewerking, waarbij n .length

Zie ook

Van toepassing op

BinarySearch<T>(T[], Int32, Int32, T, IComparer<T>)

Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs
Bron:
Array.cs

Zoekt in een bereik met elementen in een eendimensionale gesorteerde matrix naar een waarde met behulp van de opgegeven IComparer<T> algemene interface.

public:
generic <typename T>
 static int BinarySearch(cli::array <T> ^ array, int index, int length, T value, System::Collections::Generic::IComparer<T> ^ comparer);
public static int BinarySearch<T>(T[] array, int index, int length, T value, System.Collections.Generic.IComparer<T> comparer);
public static int BinarySearch<T>(T[] array, int index, int length, T value, System.Collections.Generic.IComparer<T>? comparer);
static member BinarySearch : 'T[] * int * int * 'T * System.Collections.Generic.IComparer<'T> -> int
Public Shared Function BinarySearch(Of T) (array As T(), index As Integer, length As Integer, value As T, comparer As IComparer(Of T)) As Integer

Type parameters

T

Het type van de elementen van de matrix.

Parameters

array
T[]

De gesorteerde eendimensionale, op nul gebaseerde Array zoekopdrachten.

index
Int32

De beginindex van het bereik om te zoeken.

length
Int32

De lengte van het bereik om te zoeken.

value
T

Het object waarnaar moet worden gezocht.

comparer
IComparer<T>

De IComparer<T> implementatie die moet worden gebruikt bij het vergelijken van elementen.

– of –

null om de IComparable<T> implementatie van elk element te gebruiken.

Retouren

De index van de opgegeven in de opgegeven valuearray, indien value gevonden; anders een negatief getal. Als value deze niet wordt gevonden en value kleiner is dan een of meer elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van de index van het eerste element dat groter is dan value. Als value deze niet wordt gevonden en value groter is dan alle elementen, arrayis het negatieve getal dat wordt geretourneerd het bitsgewijze complement van (de index van het laatste element plus 1). Als deze methode wordt aangeroepen met een niet-gesorteerde arraywaarde, kan de retourwaarde onjuist zijn en kan een negatief getal worden geretourneerd, zelfs als value deze aanwezig is in array.

Uitzonderingen

array is null.

index is kleiner dan de ondergrens van array.

– of –

length is kleiner dan nul.

index en length geef geen geldig bereik op in array.

– of –

comparer is null, en value is van een type dat niet compatibel is met de elementen van array.

comparer is nullen T implementeert IComparable<T> de algemene interface niet.

Opmerkingen

Deze methode biedt geen ondersteuning voor het zoeken van matrices die negatieve indexen bevatten. array moet worden gesorteerd voordat u deze methode aanroept.

Als de matrix de opgegeven waarde niet bevat, retourneert de methode een negatief geheel getal. U kunt de operator bitwise complement (~ in C#, Not in Visual Basic) toepassen op het negatieve resultaat om een index te produceren. Als deze index gelijk is aan de grootte van de matrix, zijn er geen elementen groter dan value in de matrix. Anders is het de index van het eerste element dat groter is dan value.

De vergelijkingsfunctie past aan hoe de elementen worden vergeleken. U kunt bijvoorbeeld een System.Collections.CaseInsensitiveComparer als vergelijkingsfunctie gebruiken om hoofdlettergevoelige tekenreekszoekopdrachten uit te voeren.

Als comparer dat niet nullhet is, worden de elementen array vergeleken met de opgegeven waarde met behulp van de opgegeven IComparer<T> algemene interface-implementatie. De elementen van array moeten al worden gesorteerd in toenemende waarde volgens de sorteervolgorde die is gedefinieerd door comparer; anders kan het resultaat onjuist zijn.

Als comparer dat het is null, wordt de vergelijking uitgevoerd met behulp van de IComparable<T> algemene interface-implementatie die voor het type Tis opgegeven. De elementen van moeten al in toenemende waarde worden gesorteerd op basis van array de sorteervolgorde die door de IComparable<T> implementatie is gedefinieerd. Anders kan het resultaat onjuist zijn.

Dubbele elementen zijn toegestaan. Als het Array meer dan één element bevat dat gelijk is aan value, retourneert de methode de index van slechts één van de exemplaren en niet noodzakelijkerwijs de eerste.

null kan altijd worden vergeleken met elk ander referentietype; daarom genereren vergelijkingen met null geen uitzondering bij gebruik IComparable<T>.

Note

Voor elk getest element wordt value de juiste IComparable<T> implementatie doorgegeven, zelfs als value dat het geval is null. Dat wil gezegd, de IComparable<T> implementatie bepaalt hoe een bepaald element zich verhoudt tot null.

Deze methode is een O(log)-nbewerking, waarbij n .length

Zie ook

Van toepassing op