2

これは数日間私を夢中にさせています。以下が機能しないのはなぜですか?

    Dim arr(3, 3) As Integer

    For y As Integer = 0 To arr.GetLength(0) - 1
        For x As Integer = 0 To arr.GetLength(y) - 1
            arr(y, x) = y + x
        Next
    Next

また、代わりに配列がこのように見える場合はどうなるでしょうか?

{ {1, 2, 3},
  {4, 5, 6, 7, 8, 9, 9, 9},
  {5, 4, 3, 2}
}
4

7 に答える 7

6

「2」または「3」次元がないためです。.GetLength(y) ではなく .GetLength(1) にする必要があります

また、VB.Net では、配列宣言の動作が少し異なります。宣言で指定する添え字は最後のインデックスであり、C# や C++ のように作成されるアイテムの数ではありません。ただし、配列は VB6 のように 1 インデックスではなく、C# や C++ のように 0 インデックスのままです。つまり、別の言語から VB.Net に移行すると、言語に関係なく、配列の本能がおそらく間違っているということです。VB.Net では、Dim arr(3,3) As Integerは実際には4x4配列を作成します。

于 2008-09-08T19:15:57.500 に答える
5

さて、本当に必要なのは「ギザギザ配列」です。これにより、「さまざまな長さの他の配列を含む配列」を持つことができます。

  Dim arr As Integer()() = {New Integer() {1, 2, 3}, New Integer() {4, 5, 6, 7, 8, 9, 9, 9}, New Integer() {5, 4, 3, 2}}

  For x = 0 To arr.GetUpperBound(0)
      Console.WriteLine("Row " & x & " has " & arr(x).GetUpperBound(0) & " columns")
      For y = 0 To arr(x).GetUpperBound(0)
          Console.WriteLine("(" & x & "," & y & ") = " & arr(x)(y))
      Next
   Next

出力:

Row 0 has 2 columns
(0,0) = 1
(0,1) = 2
(0,2) = 3
Row 1 has 7 columns
(1,0) = 4
(1,1) = 5
(1,2) = 6
(1,3) = 7
(1,4) = 8
(1,5) = 9
(1,6) = 9
(1,7) = 9
Row 2 has 3 columns
(2,0) = 5
(2,1) = 4
(2,2) = 3
(2,3) = 2
于 2008-09-08T20:45:17.957 に答える
3

arr.GetLength(y)

する必要があります

arr.GetLength(1)

于 2008-09-08T19:13:37.023 に答える
1

このような配列があったとしたらどうでしょうか

{ {1, 2, 3},
  {4, 5, 6, 7, 8, 9, 9, 9},
  {5, 4, 3, 2}
}

GetLength(1) はどのようにして各行の長さを知るのでしょうか?


基本的に私が欲しいのは....任意の行の要素数を見つける方法です。

于 2008-09-08T19:45:34.043 に答える
0
Dim arr(3, 3) As Integer
Dim y As Integer
Dim x As Integer

For x = 0 To arr.Rank - 1
    For y = 0 To arr.GetLength(x) - 2
        arr(x, y) = x + y
    Next
Next

上記のコードは私にとってはうまくいきました。

編集しますが、コードは汚れています。あなたが達成しようとしていることは何ですか?

于 2008-09-08T20:21:38.280 に答える
-1

あなたの宣言:DIM arr(3,3) As Integerallreadyは、特定の行に3つの要素があることを指定しています(または4、VBについてはよくわかりません)

あなたは試すことができます:

Dim arr(3) as Integer()

その後、次のことができるはずです。

arr(n).Length

行 n の長さを見つける。

私はVB6に少し慣れておらず、VB.NETを学んだことはありませんが、これにより「ギザギザ」の配列が得られるはずです。多次元配列に関する msdn のドキュメントを確認してください。

于 2008-09-08T20:17:54.217 に答える
-1

このコード en C# は、ジャグ配列内の項目のすべての組み合わせを取得するためのものです。

    static void Main(string[] args)
    {
        bool exit = false;
        int[] indices = new int[3] { 0, 0, 0 };
        string[][] vectores = new string[3][];

        vectores[0] = new string[] { "A", "B", "C" };
        vectores[1] = new string[] { "A", "B" };
        vectores[2] = new string[] { "B", "D", "E", "F" };

        string[] item;
        int[] tamaños = new int[3]{vectores[0].GetUpperBound(0), 
            vectores[1].GetUpperBound(0), 
            vectores[2].GetUpperBound(0)};

        while (!exit)
        {
            item = new string[]{ vectores[0][indices[0]],
                    vectores[1][indices[1]],
                    vectores[2][indices[2]]};

            Console.WriteLine("[{0},{1},{2}]={3}{4}{5}", indices[0], indices[1], indices[2], item[0], item[1], item[2]);
            GetVector(tamaños, ref indices, ref exit);
        }
        Console.ReadKey();
    }

    public static void GetVector(int[] tamaños, ref int[] indices, ref bool exit)
    {
        for (int i = tamaños.GetUpperBound(0); i >= 0; i--)
        {
            if (tamaños[i] > indices[i])
            {
                indices[i]++;
                break;
            }
            else
            {
                //ULTIMO ITEM EN EL ARRAY, VALIDAR LAS OTRAS DIMENSIONES SI YA ESTA EN EL ULTIMO ITEM
                if (!ValidateIndexes(tamaños, indices))
                    indices[i] = 0;
                else
                {
                    exit = true;
                    break;
                }
            }
        }
    }

    public static bool ValidateIndexes(int[] tamaños, int[] indices)
    {
        for (int i = 0; i < tamaños.Length; i++)
        {
            if (tamaños[i] != indices[i])
                return false;
        }
        return true;
    }

出力は [0,0,0]=AAB [0,0,1]=AAD [0,0,2]=AAE [0,0,3]=AAF [0,1,0]=ABB [ 0,1,1]=ABD [0,1,2]=ABE [0,1,3]=ABF [1,0,0]=BAB [1,0,1]=BAD [1,0,2] ]=BAE [1,0,3]=BAF [1,1,0]=BBB [1,1,1]=BBD [1,1,2]=BBE [1,1,3]=BBF [2 ,0,0]=CAB [2,0,1]=CAD [2,0,2]=CAE [2,0,3]=CAF [2,1,0]=CBB [2,1,1] =CBD [2,1,2]=CBE [2,1,3]=CBF

于 2009-09-02T21:55:14.357 に答える