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


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


此方法使用指定的IComparer接口在一係列元素範圍內搜索一維排序數組中的元素。

用法:

public static int BinarySearch(Array arr, int index, int length, Object value, IComparer comparer)



參數:

  • arr :要搜索的排序一維數組。
  • index :開始搜索的範圍的起始索引。
  • length :將在其中進行搜索的範圍的長度。
  • value :要搜索的對象。
  • comparer :比較元素時,請使用IComparer實現。

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

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

以下示例程序旨在說明上述方法的用法:

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

// C# program to demonstrate the 
// Array.BinarySearch(Array,  
// Int32, Int32, 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, 0, 3,  
         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:在此示例中,這裏我們使用“CreateInstance()”方法創建類型化數組,並存儲一些整數值並在對數組進行排序後搜索一些值。

//C# program to demonstrate the  
// Array.BinarySearch(Array,  
// Int32, Int32, Object,  
// IComparer) Method  
using System; 
  
class GFG 
{ 
      
// Main Method 
public static void Main() 
{ 
    // initializes a new Array. 
    Array arr = Array.CreateInstance(typeof(Int32), 8); 
      
    // Array elements  
    arr.SetValue(20, 0); 
    arr.SetValue(10, 1); 
    arr.SetValue(30, 2); 
    arr.SetValue(40, 3); 
    arr.SetValue(50, 4); 
    arr.SetValue(80, 5); 
    arr.SetValue(70, 6); 
    arr.SetValue(60, 7); 
      
    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, 1, 4, 
         Obj, StringComparer.CurrentCulture); 
           
    if (index < 0) 
    { 
        Console.WriteLine("The object {0} is not found\n"+ 
                     "Next 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
80
70
60

sorted array
10
20
30
40
50
60
70
80

1st call
The object 10 is not found
Next larger object is at index 1

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

參考:



相關用法


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