ArrayList.BinarySearch Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Usa um algoritmo de pesquisa binária para localizar um elemento específico na parte classificada ArrayList ou em uma parte dele.
Sobrecargas
| Nome | Description |
|---|---|
| BinarySearch(Object) |
Pesquisa todo o classificado ArrayList por um elemento usando o comparador padrão e retorna o índice baseado em zero do elemento. |
| BinarySearch(Object, IComparer) |
Pesquisa todo o classificado ArrayList por um elemento usando o comparador especificado e retorna o índice baseado em zero do elemento. |
| BinarySearch(Int32, Int32, Object, IComparer) |
Pesquisa um intervalo de elementos na classificação ArrayList de um elemento usando o comparador especificado e retorna o índice baseado em zero do elemento. |
BinarySearch(Object)
Pesquisa todo o classificado ArrayList por um elemento usando o comparador padrão e retorna o índice baseado em zero do elemento.
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
Parâmetros
Retornos
O índice value baseado em zero no classificado ArrayList, se value for encontrado; caso contrário, um número negativo, que é o complemento bit a bit do índice do próximo elemento maior que value ou, se não houver nenhum elemento maior, o complemento bit a bit de Count.
Exceções
Nem value nem os elementos de implementação da ArrayListIComparable interface.
value não é do mesmo tipo que os elementos do ArrayList.
Exemplos
O exemplo de código a ArrayListseguir mostra como usar BinarySearch para localizar um objeto específico no .
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.
Comentários
O value parâmetro e cada elemento devem ArrayList implementar a IComparable interface, que é usada para comparações. Os elementos do ArrayList já devem ser classificados em valor crescente de acordo com a ordem de classificação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
A comparação null com qualquer tipo é permitida e não gera uma exceção ao usar IComparable. Ao classificar, null é considerado menor que qualquer outro objeto.
Se o ArrayList elemento contiver mais de um com o mesmo valor, o método retornará apenas uma das ocorrências e poderá retornar qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList valor especificado não contiver, o método retornará um inteiro negativo. Você pode aplicar a operação de complemento bit a bit (~) a esse inteiro negativo para obter o índice do primeiro elemento maior que o valor de pesquisa. Ao inserir o valor no ArrayListíndice, esse índice deve ser usado como o ponto de inserção para manter a ordem de classificação.
Esse método é uma O(log n) operação, onde n está Count.
Confira também
Aplica-se a
BinarySearch(Object, IComparer)
Pesquisa todo o classificado ArrayList por um elemento usando o comparador especificado e retorna o índice baseado em zero do elemento.
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
Parâmetros
- comparer
- IComparer
A IComparer implementação a ser usada ao comparar elementos.
-ou-
null para usar o comparador padrão que é a IComparable implementação de cada elemento.
Retornos
O índice value baseado em zero no classificado ArrayList, se value for encontrado; caso contrário, um número negativo, que é o complemento bit a bit do índice do próximo elemento maior que value ou, se não houver nenhum elemento maior, o complemento bit a bit de Count.
Exceções
comparer não é null nem nem value os elementos de implementação da ArrayListIComparable interface.
comparer é null e value não é do mesmo tipo que os elementos do ArrayList.
Exemplos
O exemplo a seguir cria um ArrayList animal colorido. O fornecido IComparer executa a comparação de cadeia de caracteres para a pesquisa binária. Os resultados de uma pesquisa iterativa e de uma pesquisa binária são exibidos.
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
'
Comentários
O comparador personaliza como os elementos são comparados. Por exemplo, você pode usar uma CaseInsensitiveComparer instância como o comparador para executar pesquisas de cadeia de caracteres que não diferenciam maiúsculas de minúsculas.
Se comparer for fornecido, os elementos serão ArrayList comparados com o valor especificado usando a implementação especificada IComparer . Os elementos do ArrayList já devem ser classificados em valor crescente de acordo com a ordem de classificação definida por comparer; caso contrário, o resultado pode estar incorreto.
Se comparer for null, a comparação será feita usando a IComparable implementação fornecida pelo próprio elemento ou pelo valor especificado. Os elementos do ArrayList já devem ser classificados em valor crescente de acordo com a ordem de classificação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
A comparação null com qualquer tipo é permitida e não gera uma exceção ao usar IComparable. Ao classificar, null é considerado menor que qualquer outro objeto.
Se o ArrayList elemento contiver mais de um com o mesmo valor, o método retornará apenas uma das ocorrências e poderá retornar qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList valor especificado não contiver, o método retornará um inteiro negativo. Você pode aplicar a operação de complemento bit a bit (~) a esse inteiro negativo para obter o índice do primeiro elemento maior que o valor de pesquisa. Ao inserir o valor no ArrayListíndice, esse índice deve ser usado como o ponto de inserção para manter a ordem de classificação.
Esse método é uma O(log n) operação, onde n está Count.
Confira também
Aplica-se a
BinarySearch(Int32, Int32, Object, IComparer)
Pesquisa um intervalo de elementos na classificação ArrayList de um elemento usando o comparador especificado e retorna o índice baseado em zero do elemento.
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
Parâmetros
- index
- Int32
O índice inicial baseado em zero do intervalo a ser pesquisado.
- count
- Int32
O comprimento do intervalo a ser pesquisado.
- comparer
- IComparer
A IComparer implementação a ser usada ao comparar elementos.
-ou-
null para usar o comparador padrão que é a IComparable implementação de cada elemento.
Retornos
O índice value baseado em zero no classificado ArrayList, se value for encontrado; caso contrário, um número negativo, que é o complemento bit a bit do índice do próximo elemento maior que value ou, se não houver nenhum elemento maior, o complemento bit a bit de Count.
Exceções
index e count não denotar um intervalo válido no ArrayList.
-ou-
comparer não é null nem nem value os elementos de implementação da ArrayListIComparable interface.
comparer é null e value não é do mesmo tipo que os elementos do ArrayList.
Comentários
O comparador personaliza como os elementos são comparados. Por exemplo, você pode usar uma CaseInsensitiveComparer instância como o comparador para executar pesquisas de cadeia de caracteres que não diferenciam maiúsculas de minúsculas.
Se comparer for fornecido, os elementos serão ArrayList comparados com o valor especificado usando a implementação especificada IComparer . Os elementos do ArrayList já devem ser classificados em valor crescente de acordo com a ordem de classificação definida por comparer; caso contrário, o resultado pode estar incorreto.
Se comparer for null, a comparação será feita usando a IComparable implementação fornecida pelo próprio elemento ou pelo valor especificado. Os elementos do ArrayList já devem ser classificados em valor crescente de acordo com a ordem de classificação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
A comparação null com qualquer tipo é permitida e não gera uma exceção ao usar IComparable. Ao classificar, null é considerado menor que qualquer outro objeto.
Se o ArrayList elemento contiver mais de um com o mesmo valor, o método retornará apenas uma das ocorrências e poderá retornar qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList valor especificado não contiver, o método retornará um inteiro negativo. Você pode aplicar a operação de complemento bit a bit (~) a esse inteiro negativo para obter o índice do primeiro elemento maior que o valor de pesquisa. Ao inserir o valor no ArrayListíndice, esse índice deve ser usado como o ponto de inserção para manter a ordem de classificação.
Esse método é uma O(log n) operação, onde n está count.