0


我有一个多维锯齿状字符串数组:

string[,][] MDJA = 
{
    {new string[]{"a", "b"}, new string[]{"c", "d"}, new string[]{"e", "f"}},
    {new string[]{"g", "h"}, new string[]{"j", "i"}, new string[]{"k", "l"}},
    {new string[]{"m", "n"}, new string[]{"o", "p"}, new string[]{"q", "r"}}
}

我正在使用 for 循环来比较数组在数组中的位置以获取我正在寻找的数组,但是 MDJA 在一个方法中,我希望它返回特定的数组。例如,我可能想返回

new string[]{"m", "n"}

通常我会在多维数组中执行此操作:

for (byte i = 0; i < 3; i++)
{
    if (var1[x] == var2[i])
    {
        return answers[y,i]
    }
}

但是我之前没有使用过锯齿状数组,当多维使用它们时,获取信息变得更加困难。

PS 4 个变量是方法中的参数,var1 和 var2 是字符串数组,x/y 是整数。

感谢您的帮助。

4

2 回答 2

1

我不太确定您的方法逻辑是什么样的,但关于元素访问它应该很简单:

for (int i = 0; i < MDJA.GetLength(0); i++)
{
    for (int j = 0; j < MDJA.GetLength(1); j++)
    {
        // Your compare logics go here
        //
        bool found = i == 2 && j == 0;
        if (found)
        {
            return MDJA[i, j];
        }
    }
}

这将返回string[]{"m", "n"}.

于 2013-11-01T13:44:35.060 回答
0

我以前做过,唉,我这里没有代码。

构建一个递归调用自身的实用方法,测试数组元素是否是数组本身,如果不是(因此是值)将其添加到列表中,否则将子/子数组传递给递归方法。

提示,使用 Array 对象作为此方法的参数,而不是定义的int[,][]数组,因此任何形式的疯狂int[,][][][,,,][][,]都可以传递并且仍然有效。

对于您的问题,您必须检测您希望在什么级别停止从锯齿状数组转换为值,然后在简化数组中返回这些锯齿状数组。

我稍后会发布我的代码,它可能会对你有所帮助。

    public static int Count(Array pValues)
    {
        int count = 0;

        foreach(object value in pValues)
        {
            if(value.GetType().IsArray)
            {
                count += Count((Array) value);
            }
            else
            {
                count ++;
            }
        }

        return count;
    }
于 2013-11-01T13:34:28.330 回答