當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C# Array.BinarySearch(Array, Object, IComparer)用法及代碼示例


此方法使用指定的IComparer接口在一維排序數組中搜索值。

用法:

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

參數:


  • arr :將在其中進行搜索的一維排序數組。
  • val :要搜索的對象值。
  • comparer :比較元素時,將使用IComparer實現。

返回值:如果找到該值,它將返回指定數組中指定值的索引,否則返回負數。返回值有以下幾種不同的情況:

  • 如果找不到值,並且值小於數組中的一個或多個元素,則返回的負數是大於值的第一個元素的索引的按位補碼。
  • 如果未找到該值並且該值大於數組中的所有元素,則返回的負數為的按位補碼(最後一個元素的索引加1)。
  • 如果使用非排序數組調用此方法,則即使數組中存在該值,返回值也可能不正確,並且可能返回負數。

異常:

  • ArgumentNullException:如果數組為null。
  • RankException:如果數組是多維的。
  • ArgumentException:如果範圍小於下限,則OR長度小於0。
  • ArgumentException:如果比較器為null,並且value是與數組元素不兼容的類型。
  • InvalidOperationException:如果比較器為null,則value不實現IComparable接口,並且搜索遇到不實現IComparable接口的元素。

範例1:在此示例中,數組存儲一些字符串值,並在對數組進行排序後找到一些字符串值。

// 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); 
    } 
} 
}
輸出:
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

範例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); 
    } 
} 
}
輸出:
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

參考:



相關用法


注:本文由純淨天空篩選整理自SoumikMondal大神的英文原創作品 C# | Array.BinarySearch(Array, Object, IComparer) Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。