在c#中将多维锯齿状数组作为数组返回

时间:2013-11-01 13:30:57

标签: c# arrays multidimensional-array return jagged-arrays


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

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]
    }
}

但是我之前和之后都没有使用过锯齿状数组,这使得获取信息变得更加困难。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分: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"}

答案 1 :(得分:0)

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

构建一个递归调用自身的实用程序方法,测试数组元素是否为数组本身,如果不是(以及某个值)则将其添加到List中,否则将子/子数组传递给递归方法。

提示,使用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;
    }