Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ArrayList.BinarySearch (Object)

 

Data di pubblicazione: ottobre 2016

Cerca un elemento nell'intero ArrayList ordinato usando l'operatore di confronto predefinito e restituisce l'indice in base zero dell'elemento.

Spazio dei nomi:   System.Collections
Assembly:  mscorlib (in mscorlib.dll)

public virtual int BinarySearch(
	object value
)

Parametri

value
Type: System.Object

La classe Object da individuare. Il valore può essere null.

Valore restituito

Type: System.Int32

Indice in base zero di value nell'oggetto ArrayList ordinato, se viene trovato value; in caso contrario, un numero negativo che rappresenta il complemento bit per bit dell'indice dell'elemento successivo maggiore di value oppure, se non c'è un elemento maggiore, il complemento bit per bit di Count.

Exception Condition
ArgumentException

value né gli elementi di ArrayList implementano l'interfaccia IComparable.

InvalidOperationException

value non è dello stesso tipo degli elementi di ArrayList.

Il value parametro e ogni elemento di ArrayList deve implementare il IComparable interfaccia, che viene utilizzato per i confronti. Gli elementi del ArrayList deve essere già ordinati in ordine crescente in base all'ordinamento definito per il IComparable implementazione; in caso contrario, il risultato potrebbe essere errato.

Confronto tra null con qualsiasi tipo è consentito e non genera un'eccezione quando si utilizza IComparable. Durante l'ordinamento, null viene considerato minore rispetto a qualsiasi altro oggetto.

Se il ArrayList contiene più di un elemento con lo stesso valore, il metodo restituisce solo una delle occorrenze e potrebbe essere una qualsiasi delle occorrenze, non necessariamente il primo argomento.

Se il ArrayList non contiene il valore specificato, il metodo restituisce un numero intero negativo. È possibile applicare l'operazione di complemento bit per bit (~) per questo numero intero negativo per ottenere l'indice del primo elemento che è maggiore del valore di ricerca. Quando si inserisce il valore di ArrayList, questo indice deve essere utilizzato come punto di inserimento per gestire l'ordinamento.

Questo metodo è un'operazione O(log n), dove n è Count.

Esempio di codice seguente viene illustrato come utilizzare BinarySearch per individuare un oggetto specifico di ArrayList.

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 Int32 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 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.
*/ 

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: