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 に答える