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