Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Array.BinarySearch (Método) (Array, Object)

 

Busca un elemento específico en toda una matriz unidimensional y ordenada, utilizando la interfaz IComparable implementada por cada elemento de la matriz y por el objeto especificado.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public static int BinarySearch(
	Array array,
	object value
)

Parámetros

array

Matriz Array unidimensional y ordenada en la que se va a buscar.

value

Objeto que se va a buscar.

Valor devuelto

Type: System.Int32

Índice del objeto value especificado en la matriz array especificada, si se encuentra el objeto value.Si no se encuentra value y value es menor que uno o varios elementos de array, un número negativo que es el complemento bit a bit del índice del primer elemento que sea mayor que value.Si no se encuentra value y value es mayor que cualquiera de los elementos de array, un número negativo que es el complemento bit a bit del índice del último elemento más uno.

Exception Condition
ArgumentNullException

El valor de array es null.

RankException

array es multidimensional.

ArgumentException

value es de un tipo que no es compatible con los elementos de array.

InvalidOperationException

value no implementa la interfaz IComparable y la búsqueda encuentra un elemento que no implementa la interfaz IComparable.

Este método no admite buscar en matrices con índices negativos. arrayse debe ordenar antes de llamar a este método.

Si la Array no contiene el valor especificado, el método devuelve un entero negativo.Puede aplicar el operador de complemento bit a bit (~ en C#, Not en Visual Basic) al resultado negativo para generar un índice.Si este índice es una mayor que el límite superior de la matriz, hay ningún elemento mayor que value en la matriz.De lo contrario, es el índice del primer elemento mayor que value.

Ya sea value o todos los elementos de array debe implementar la IComparable interfaz, que se utiliza para las comparaciones.Los elementos de array ya deben estar ordenados de forma ascendente según el criterio de ordenación definido por el IComparable implementación; de lo contrario, es posible que el resultado sea incorrecto.

System_CAPS_noteNota

Si value no implementa la IComparable de la interfaz, los elementos de array no se han probado para IComparable antes de que comience la búsqueda.Se produce una excepción si la búsqueda encuentra un elemento que no implementa IComparable.

Se permiten elementos duplicados.Si el Array contiene más de un elemento igual a value, el método devuelve el índice de sólo una de las apariciones, no necesariamente la primera.

nullsiempre puede compararse con cualquier otro tipo de referencia; por lo tanto, las comparaciones con null no generan una excepción.

System_CAPS_noteNota

Para cada elemento probado, value se pasa a la correspondiente IComparable implementación, incluso si value es null.Es decir, el IComparable implementación determina cómo se compara un elemento especificado a null.

Este método es un O(log n) operación, donde n es el Length de array.

En el ejemplo de código siguiente se muestra cómo utilizar BinarySearch para localizar un objeto específico en un Array.

System_CAPS_noteNota

La matriz se crea con sus elementos en orden ascendente.El BinarySearch método requiere que la matriz esté ordenada en orden ascendente.

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.

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 1.1
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: