我有一个多维锯齿状的字符串数组:
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是整数。
感谢您的帮助。
答案 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;
}