C# | Método Array.BinarySearch(Array, Object, IComparer)

Este método busca un valor en una array ordenada unidimensional mediante una interfaz IComparer especificada.

Sintaxis:

public static int BinarySearch(Array arr, Object val, IComparer comparer)

Parámetros:

  • arr : la array ordenada unidimensional en la que se realizará la búsqueda.
  • val : El valor del objeto que se va a buscar.
  • comparer : cuando se comparan elementos, se utiliza la implementación de IComparer .

Valor devuelto: Devuelve el índice del valor especificado en la array especificada si se encuentra el valor ; de lo contrario, devuelve un número negativo. Hay diferentes casos de valores de retorno de la siguiente manera:

  • Si no se encuentra el valor y el valor es menor que uno o más elementos de la array , el número negativo devuelto es el complemento bit a bit del índice del primer elemento que es mayor que el valor .
  • Si no se encuentra el valor y el valor es mayor que todos los elementos de la array, el número negativo devuelto es el complemento bit a bit de (el índice del último elemento más 1).
  • Si se llama a este método con una array no ordenada, el valor devuelto puede ser incorrecto y se puede devolver un número negativo, incluso si el valor está presente en la array.

Excepciones:

  • ArgumentNullException: si la array es nula.
  • RankException: si la array es multidimensional.
  • ArgumentException: si el rango es menor que el límite inferior O la longitud es menor que 0.
  • ArgumentException: si el comparador es nulo y el valor es de un tipo que no es compatible con los elementos de la array .
  • InvalidOperationException: si el comparador es nulo, el valor no implementa la interfaz IComparable y la búsqueda encuentra un elemento que no implementa la interfaz IComparable.

Ejemplo 1: en este ejemplo, la array almacena algún valor de string y encuentra algún valor de string después de ordenar la array.

// C# program to demonstrate the 
// Array.BinarySearch(Array, 
// Object, IComparer) Method
using System;
  
class GFG {
  
// Main Method
public static void Main()
{
    // initializes a new Array
    string[] arr = new string[5] { "ABCD", 
           "IJKL", "XYZ", "EFGH", "MNOP"};
  
    Console.WriteLine("The original Array");
      
    // calling "display" function
    display(arr);
      
  
    Console.WriteLine("\nsorted array");
      
    // sorting the Array
    Array.Sort(arr);
    display(arr);
  
    Console.WriteLine("\n1st call");
      
    // search for object "EFGH"
    object obj1 = "EFGH";
      
    // call the "FindObj" function
    FindObj(arr, obj1);
  
    Console.WriteLine("\n2nd call");
    object obj2 = "ABCD";
    FindObj(arr, obj2);
}
  
// find object method
public static void FindObj(string[] Arr,
                             object Obj)
{
    int index = Array.BinarySearch(Arr, Obj, 
             StringComparer.CurrentCulture);
               
    if (index < 0) 
    {
        Console.WriteLine("The object {0} is not "+
                 "found\nNext larger object is at"+
                        " index {1}", Obj, ~index);
    }
      
    else
    {
        Console.WriteLine("The object {0} is at "+
                         "index {1}", Obj, index);
    }
}
  
// display method
public static void display(string[] arr)
{
    foreach(string g in arr)
    {
        Console.WriteLine(g);
    }
}
}
Producción:

The original Array
ABCD
IJKL
XYZ
EFGH
MNOP

sorted array
ABCD
EFGH
IJKL
MNOP
XYZ

1st call
The object EFGH is at index 1

2nd call
The object ABCD is at index 0

Ejemplo 2:

// C# program to demonstrate the 
// Array.BinarySearch(Array, 
// Object, IComparer) Method
using System;
  
class GFG {
      
// Main Method
public static void Main()
{
      
    // initializes a new Array.
    Array arr = Array.CreateInstance(typeof(Int32), 5);
  
    // Array elements
    arr.SetValue(20, 0);
    arr.SetValue(10, 1);
    arr.SetValue(30, 2);
    arr.SetValue(40, 3);
    arr.SetValue(50, 4);
  
    Console.WriteLine("The original Array");
      
    // calling "display" function
    display(arr);
  
  
    Console.WriteLine("\nsorted array");
      
    // sorting the Array
    Array.Sort(arr);
  
    display(arr);
  
    Console.WriteLine("\n1st call");
      
    // search for object 10
    object obj1 = 10;
      
    // call the "FindObj" function
    FindObj(arr, obj1);
      
    Console.WriteLine("\n2nd call");
    object obj2 = 60;
    FindObj(arr, obj2);
}
  
// find object method
public static void FindObj(Array Arr,
                          object Obj)
{
    int index = Array.BinarySearch(Arr, Obj, 
             StringComparer.CurrentCulture);
               
  
    if (index < 0) 
    {
        Console.WriteLine("The object {0} is not found\nNext"+
               " larger object is at index {1}", Obj, ~index);
    }
    else {
        Console.WriteLine("The object {0} is at index {1}",
                                               Obj, index);
    }
}
  
// display method
public static void display(Array arr)
{
    foreach(int g in arr)
    {
        Console.WriteLine(g);
    }
}
}
Producción:

The original Array
20
10
30
40
50

sorted array
10
20
30
40
50

1st call
The object 10 is at index 0

2nd call
The object 60 is not found
Next larger object is at index 5

Referencia:

Publicación traducida automáticamente

Artículo escrito por SoumikMondal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *