Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Array.BinarySearch méthode (Array, Object)

 

Recherche un élément spécifique dans tout un tableau trié unidimensionnel, à l’aide de l’interface IComparable implémentée par chaque élément du tableau et par l’objet spécifié.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public static int BinarySearch(
	Array array,
	object value
)

Paramètres

array
Type: System.Array

Array unidimensionnel trié à explorer.

value
Type: System.Object

Objet à rechercher.

Valeur de retour

Type: System.Int32

Index de la value spécifiée dans l’array spécifié, si value est trouvé. Si value est introuvable et que value est inférieur à un ou plusieurs éléments dans array, le nombre négatif retourné est le complément de bits de l’index du premier élément supérieur à value. Si value est introuvable et que value est supérieur à tous les éléments de array, le nombre négatif retourné est le complément de bits de l’index du dernier élément plus 1. Si cette méthode est appelée avec un array non trié, la valeur de retour peut être incorrecte et un nombre négatif peut être retourné, même si value est présent dans array.

Exception Condition
ArgumentNullException

array a la valeur null.

RankException

array est multidimensionnel.

ArgumentException

value est d’un type qui n’est pas compatible avec les éléments de array.

InvalidOperationException

value n’implémente pas l’interface IComparable et la recherche rencontre un élément qui n’implémente pas l’interface IComparable.

Cette méthode ne prend pas en charge la recherche dans les tableaux qui contiennent des index négatives. arraydoivent être triées avant d’appeler cette méthode.

Si le Array ne contient pas la valeur spécifiée, la méthode retourne un entier négatif. Vous pouvez appliquer l’opérateur de complément de bits (~ en c#, Not en Visual Basic) au résultat négatif pour produire un index. Si cet index est un supérieur à la limite supérieure du tableau, il n’existe aucun élément supérieur à value dans le tableau. Sinon, c’est l’index du premier élément supérieur à value.

Soit value ou tous les éléments de array doit implémenter la IComparable interface, qui est utilisée pour les comparaisons. Les éléments de array doit déjà être trié par ordre croissant selon l’ordre de tri défini par le IComparable implémentation ; sinon, le résultat peut être incorrect.

System_CAPS_noteRemarque

Sivalue n’implémente pas le IComparable les éléments d’interface array ne sont pas testées pour IComparable avant le début de la recherche. Une exception est levée si la recherche rencontre un élément qui n’implémente pas IComparable.

Les éléments en double sont autorisés. Si le Array contient plusieurs éléments égal à value, la méthode retourne l’index d’une des occurrences uniquement et pas nécessairement le.

nullpeut toujours être comparé à n’importe quel autre type de référence. Par conséquent, les comparaisons avec null ne génèrent pas d’exception.

System_CAPS_noteRemarque

   Pour chaque élément testé, value est passée à approprié IComparable mise en œuvre, même si value est null. Autrement dit, le IComparable implémentation détermine comment un élément donné est comparé à null.

Cette méthode est un O (journal n) opération, où n est la Length de array.

L’exemple de code suivant montre comment utiliser BinarySearch pour localiser un objet spécifique dans un Array.

System_CAPS_noteRemarque

Le tableau est créé avec ses éléments dans l’ordre de tri croissant. Le BinarySearch méthode requiert que le tableau à trier dans l’ordre croissant.

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.

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: