2011-05-21 108 views
4

在C#,如何搜索多維數組?

Array.Find<T>(arrayName, value); 

搜索的一個維陣列。無論如何要爲多維數組做這個(例如myArray[,,])?

+4

如果您需要多次搜索'O(dimension_1 * dimension_2 * ... * dimension_n)'這樣的搜索,那麼在選擇算法和數據結構時,您已經做出了非常錯誤的選擇。 – delnan 2011-05-21 21:59:53

回答

6

使用Excel和VSTO,我一直處理多維數組。沒有像Array.Find()這樣的多維數組的內置函數。

您基本上有兩種選擇:創建您自己的幫助器方法並在其中實現通用搜索模式,或者生成與多維數組內容相關的域對象列表。我個人傾向於選擇後者。

如果你選擇寫一個輔助方法,它可能看起來是(非常粗略地)是這樣的:

// you could easily modify this code to handle 3D arrays, etc. 
public static class ArrayHelper 
{ 
    public static object FindInDimensions(this object[,] target, 
     object searchTerm) 
    { 
     object result = null; 
     var rowLowerLimit = target.GetLowerBound(0); 
     var rowUpperLimit = target.GetUpperBound(0); 

     var colLowerLimit = target.GetLowerBound(1); 
     var colUpperLimit = target.GetUpperBound(1); 

     for (int row = rowLowerLimit; row < rowUpperLimit; row++) 
     { 
      for (int col = colLowerLimit; col < colUpperLimit; col++) 
      { 
       // you could do the search here... 
      } 
     } 

     return result; 
    } 
} 

你會引用靜態伸展像這樣的應用程序代碼的其他部分:

object[,] myArray = GetMyArray(); // gets an array[,] 
myArray.FindInDimensions(someObject); 
+0

所有的上限應該是++或<需要是<= – 2016-10-30 12:54:00

+0

偉大的解決方案。你說得對,用VSTO和Excel工作,這非常有用。 – 2017-03-03 22:02:15

2

展平多維數組,然後使用Array.Find

+1

這與工會聲明一致。 – Dave 2011-05-21 23:28:43

+1

扁平化過程將花費比循環和搜索更長的時間。 – TheLQ 2011-05-21 23:40:43

+0

@TheLQ:我同意,在扁平化過程中內聯搜索是更好的方法。 – davidk01 2011-05-21 23:49:42