2013-11-01 54 views
0


我有一个多维锯齿状字符串数组:返回多维交错数组在C#中的数组

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

目前还不清楚你在问什么。如果我没有弄错,在你的例子中,你希望带有'{“m”,“n”}'的数组从string [] myMethod(string [] var1,string [] var2 ,int x,int y)'。应该发生什么参数值? –

回答

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

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