ArrayList.BinarySearch Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Utiliza um algoritmo de pesquisa binária para localizar um elemento específico no ordenado ArrayList ou uma parte dele.
Sobrecargas
| Name | Description |
|---|---|
| BinarySearch(Object) |
Pesquisa em todo o ArrayList conjunto ordenado por um elemento usando o comparador padrão e retorna o índice zero do elemento. |
| BinarySearch(Object, IComparer) |
Pesquisa todo o elemento ordenado ArrayList usando o comparador especificado e devolve o índice zero do elemento. |
| BinarySearch(Int32, Int32, Object, IComparer) |
Pesquisa um intervalo de elementos ordenados ArrayList por um elemento usando o comparador especificado e devolve o índice zero do elemento. |
BinarySearch(Object)
Pesquisa em todo o ArrayList conjunto ordenado por um elemento usando o comparador padrão e retorna o índice 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
Devoluções
O índice baseado em zero de value no ordenado 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 elemento maior, o complemento bit a bit de Count.
Exceções
Nem value os elementos de ArrayList implementar a IComparable interface.
value não é do mesmo tipo que os elementos do ArrayList.
Exemplos
O exemplo de código seguinte mostra como usar BinarySearch para localizar um objeto específico no ArrayListarquivo .
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.
Observações
O value parâmetro e cada elemento de deve ArrayList implementar a IComparable interface, que é usada para comparações. Os elementos do ArrayList já devem estar ordenados em valor crescente de acordo com a ordem de ordenação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
Comparar null com qualquer tipo é permitido e não gera exceção ao usar IComparable. Ao ordenar, null considera-se menos do que qualquer outro objeto.
Se o ArrayList contiver mais do que um elemento com o mesmo valor, o método devolve apenas uma das ocorrências, e pode devolver qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList não contiver o valor especificado, o método devolve um inteiro negativo. Pode aplicar a operação de complemento bit a bit (~) a este inteiro negativo para obter o índice do primeiro elemento maior do que o valor de pesquisa. Ao inserir o valor no ArrayList, este índice deve ser usado como ponto de inserção para manter a ordem de ordenação.
Este método é uma O(log n) operação, onde n é Count.
Ver também
Aplica-se a
BinarySearch(Object, IComparer)
Pesquisa todo o elemento ordenado ArrayList usando o comparador especificado e devolve o índice 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 usar ao comparar elementos.
-ou-
null para usar o comparador padrão que é a IComparable implementação de cada elemento.
Devoluções
O índice baseado em zero de value no ordenado 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 elemento maior, o complemento bit a bit de Count.
Exceções
comparer é null e nem value os elementos de ArrayList implementar a IComparable interface.
comparer é null e value não é do mesmo tipo que os elementos do ArrayList.
Exemplos
O exemplo seguinte cria um ArrayList de animais coloridos. O fornecido IComparer realiza a comparação de cadeias para a pesquisa binária. Os resultados tanto de uma pesquisa iterativa como de uma pesquisa binária são apresentados.
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
'
Observações
O comparador personaliza a forma como os elementos são comparados. Por exemplo, pode usar uma CaseInsensitiveComparer instância como comparador para realizar pesquisas de cadeias insensíveis a maiúsculas minúsculas.
Se comparer for fornecido, os elementos de são ArrayList comparados ao valor especificado usando a implementação especificada IComparer . Os elementos de devem ArrayList já estar ordenados em valor crescente de acordo com a ordem de ordenação definida por comparer; caso contrário, o resultado pode estar incorreto.
Se comparer for null, a comparação é feita usando a IComparable implementação fornecida pelo próprio elemento ou pelo valor especificado. Os elementos do ArrayList já devem estar ordenados em valor crescente de acordo com a ordem de ordenação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
Comparar null com qualquer tipo é permitido e não gera exceção ao usar IComparable. Ao ordenar, null considera-se menos do que qualquer outro objeto.
Se o ArrayList contiver mais do que um elemento com o mesmo valor, o método devolve apenas uma das ocorrências, e pode devolver qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList não contiver o valor especificado, o método devolve um inteiro negativo. Pode aplicar a operação de complemento bit a bit (~) a este inteiro negativo para obter o índice do primeiro elemento maior do que o valor de pesquisa. Ao inserir o valor no ArrayList, este índice deve ser usado como ponto de inserção para manter a ordem de ordenação.
Este método é uma O(log n) operação, onde n é Count.
Ver também
Aplica-se a
BinarySearch(Int32, Int32, Object, IComparer)
Pesquisa um intervalo de elementos ordenados ArrayList por um elemento usando o comparador especificado e devolve o índice 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 pesquisar.
- count
- Int32
O comprimento do campo de tiro para procurar.
- comparer
- IComparer
A IComparer implementação a usar ao comparar elementos.
-ou-
null para usar o comparador padrão que é a IComparable implementação de cada elemento.
Devoluções
O índice baseado em zero de value no ordenado 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 elemento maior, o complemento bit a bit de Count.
Exceções
index e count não denotam um intervalo válido no ArrayList.
-ou-
comparer é null e nem value os elementos de ArrayList implementar a IComparable interface.
comparer é null e value não é do mesmo tipo que os elementos do ArrayList.
Observações
O comparador personaliza a forma como os elementos são comparados. Por exemplo, pode usar uma CaseInsensitiveComparer instância como comparador para realizar pesquisas de cadeias insensíveis a maiúsculas minúsculas.
Se comparer for fornecido, os elementos de são ArrayList comparados ao valor especificado usando a implementação especificada IComparer . Os elementos de devem ArrayList já estar ordenados em valor crescente de acordo com a ordem de ordenação definida por comparer; caso contrário, o resultado pode estar incorreto.
Se comparer for null, a comparação é feita usando a IComparable implementação fornecida pelo próprio elemento ou pelo valor especificado. Os elementos do ArrayList já devem estar ordenados em valor crescente de acordo com a ordem de ordenação definida pela IComparable implementação; caso contrário, o resultado pode estar incorreto.
Comparar null com qualquer tipo é permitido e não gera exceção ao usar IComparable. Ao ordenar, null considera-se menos do que qualquer outro objeto.
Se o ArrayList contiver mais do que um elemento com o mesmo valor, o método devolve apenas uma das ocorrências, e pode devolver qualquer uma das ocorrências, não necessariamente a primeira.
Se o ArrayList não contiver o valor especificado, o método devolve um inteiro negativo. Pode aplicar a operação de complemento bit a bit (~) a este inteiro negativo para obter o índice do primeiro elemento maior do que o valor de pesquisa. Ao inserir o valor no ArrayList, este índice deve ser usado como ponto de inserção para manter a ordem de ordenação.
Este método é uma O(log n) operação, onde n é count.