¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
BinarySearch (Método) (Object, IComparer)
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ArrayList.BinarySearch (Método) (Object, IComparer)

Busca la ArrayList completa ordenada para un elemento utilizando el comparador especificado y devuelve el índice de base cero del elemento.

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

public virtual int BinarySearch(
	Object value,
	IComparer comparer
)

Parámetros

value
Tipo: System.Object
Clase Object que se va a localizar. El valor puede ser null.
comparer
Tipo: System.Collections.IComparer
Implementación de IComparer que se va a utilizar al comparar elementos.
O bien
null para utilizar el comparador predeterminado, que es la implementación de IComparable de cada elemento.

Valor devuelto

Tipo: System.Int32
Índice de base cero de value en la ArrayList ordenada si se encuentra value; en caso contrario, número negativo que es el complemento bit a bit del índice del siguiente elemento mayor que value o, si no hay ningún elemento mayor, el complemento bit a bit de la propiedad Count.

ExcepciónCondición
ArgumentException

comparer es null y ni value ni los elementos de ArrayList implementan la interfaz IComparable.

InvalidOperationException

comparer es null y value no es del mismo tipo que los elementos de ArrayList.

El comparador personaliza la forma en que se comparan los elementos. Por ejemplo, se puede utilizar una instancia de CaseInsensitiveComparer como comparador para realizar búsquedas de cadenas sin distinción entre mayúsculas y minúsculas.

Si se proporciona comparer, los elementos de ArrayList se comparan con el valor especificado utilizando la implementación de IComparer especificada. Los elementos de la matriz ArrayList ya deben estar ordenados al aumentar el valor de acuerdo al criterio de ordenación definido por comparer; de lo contrario, el resultado podría ser incorrecto.

Si comparer es null, la comparación se realiza utilizando la implementación de IComparable proporcionada por el propio elemento o por el valor especificado. Los elementos de la matriz ArrayList ya deben estar ordenados al aumentar el valor de acuerdo al criterio de ordenación definido por la implementación de IComparable; de lo contrario, el resultado podría ser incorrecto.

Se puede comparar null con cualquier tipo sin que se genere una excepción al utilizar IComparable. Al ordenar, null se considera menor que cualquier otro objeto.

Si ArrayList contiene más de un elemento con el mismo valor, el método sólo devuelve una de las apariciones y puede devolver cualquiera de ellas, pero no tiene por qué ser necesariamente la primera.

Si ArrayList no contiene el valor especificado, el método devuelve un entero negativo. Se puede aplicar la operación de complemento bit a bit (~) a este entero negativo para obtener el índice del primer elemento que sea mayor que el valor de búsqueda. Si se inserta el valor en ArrayList, se debe utilizar este índice como punto de inserción para mantener el criterio de ordenación.

Este método es una operación O(log n), donde n es Count.

En el siguiente ejemplo se crea una ArrayList de animales de colores. El IComparer proporcionado realiza la comparación de cadenas para la búsqueda binaria. Se muestran los resultados de una búsqueda reiterativa y una búsqueda binaria.


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
//


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft