【问题标题】:return multidimensional jagged array as an array in c#在c#中将多维锯齿数组作为数组返回
【发布时间】:2013-11-12 17:04:57
【问题描述】:


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

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 是整数。

感谢您的帮助。

【问题讨论】:

  • 不清楚你在问什么。如果我没记错的话,在您的示例中,您希望从签名string[] myMethod(string[] var1, string[] var2, int x, int y) 的方法中返回带有{"m", "n"} 的数组。应该使用哪些参数值来实现这一点?

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


【解决方案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"}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多