如何搜索多维数组?

4

在C#中,

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

搜索一维数组。有没有办法对多维数组(例如myArray[,,])进行这样的操作?


4
如果您需要进行多次 O(维度1 * 维度2 * ... * 维度n) 的搜索,那么在选择算法和数据结构时可能出现了严重的错误。 - user395760
3个回答

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);

所有的上限都应该是++,或者<需要变成<=。 - Ehsan Jeihani
很棒的解决方案。你说得对,使用VSTO和Excel工作时非常有用。 - Leo Gurdian

3

没有内置的多维搜索功能。您需要自己编写。


1

将多维数组展平,然后使用Array.Find


3
压平处理需要比简单循环和搜索花费更长的时间。 - TheLQ
@TheLQ: 我同意,在搜索过程中进行内联处理是更好的方法。 - David K.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接