2011-05-21 83 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