📜  C#|锯齿状阵列

📅  最后修改于: 2021-05-29 16:12:25             🧑  作者: Mango

先决条件:C#中的数组

锯齿状数组是数组的数组,因此成员数组可以具有不同的大小。换句话说,每个数组索引的长度可以不同。锯齿数组的元素是引用类型,默认情况下初始化为null。锯齿状阵列也可以与多维阵列混合。在这里,行数将在声明时固定,但是您可以更改列数。

宣言

在锯齿状数组中,用户仅需提供行数。如果用户也要提供列数,则该数组将不再是锯齿状数组。

句法:

data_type[][] name_of_array = new data_type[rows][]

例子:

int[][] jagged_arr = new int[4][]

在上面的示例中,声明了具有4个元素(行)的一维数组,每个元素(行)都是一维整数数组。

初始化

锯齿状数组的元素必须在使用进行初始化。您可以分别初始化每个数组元素。有很多方法可以初始化锯齿数组的元素。

示例1:分别提供每个数组元素的大小。这里的每个元素都是一维整数数组,其中:

  • 第一行或元素是2个整数的数组。
  • 第二行或元素是4个整数的数组。
  • 第三行或元素是6个整数的数组。
  • 第四行或元素是7个整数的数组。
jagged_arr[0] = new int[2];
jagged_arr[1] = new int[4];
jagged_arr[2] = new int[6];
jagged_arr[3] = new int[7];

示例2:当不需要数组大小时,可以使用直接值初始化其元素,如下所示:

jagged_arr[0] = new int[] {1, 2, 3, 4};
jagged_arr[1] = new int[] {11, 34, 67};
jagged_arr[2] = new int[] {89, 23};
jagged_arr[3] = new int[] {0, 45, 78, 53, 99};

声明和初始化

示例1:使用直接方法

int[][] jagged_arr = new int[][] 
{
    new int[] {1, 2, 3, 4},
    new int[] {11, 34, 67},
    new int[] {89, 23},
    new int[] {0, 45, 78, 53, 99}
};

示例2:使用速记方法。元素没有默认的初始化,因此用户无法从元素初始化中省略新的运算符。

int[][] jagged_arr = 
{
    new int[] {1, 2, 3, 4},
    new int[] {11, 34, 67},
    new int[] {89, 23},
    new int[] {0, 45, 78, 53, 99}
};

访问元素

要访问锯齿状数组的元素,用户必须使用数组名称指定行和列。

例子:

// Accessing & Assigning 99 to the third element ([2]) of the second array ([1])
jagged_arr[1][2] = 99;

// Accessing & Assigning 47 to the first element ([0]) of the fourth array ([3]):
jagged_arr[3][0] = 47;

程序:

// C# program to illustrate the declaration 
// and Initialization of Jagged Arrays
using System;
  
class GFG {
      
    // Main Method
    public static void Main()
    {
          
        // Declare the Jagged Array of four elements:
        int[][] jagged_arr = new int[4][];
  
        // Initialize the elements
        jagged_arr[0] = new int[] {1, 2, 3, 4};
        jagged_arr[1] = new int[] {11, 34, 67};
        jagged_arr[2] = new int[] {89, 23};
        jagged_arr[3] = new int[] {0, 45, 78, 53, 99};
  
        // Display the array elements:
        for (int n = 0; n < jagged_arr.Length; n++) {
  
            // Print the row number
            System.Console.Write("Row({0}): ", n);
  
            for (int k = 0; k < jagged_arr[n].Length; k++) {
  
                // Print the elements in the row
                System.Console.Write("{0} ", jagged_arr[n][k]);
            }
            System.Console.WriteLine();
        }
    }
}

输出:

Row(0): 1 2 3 4 
Row(1): 11 34 67 
Row(2): 89 23 
Row(3): 0 45 78 53 99 

带多维数组的锯齿数组

可以混合锯齿状数组和多维数组。以下是一维锯齿状数组的声明和初始化,该数组包含四个大小不同的二维数组元素。

例子:

int[][, ] jagged_arr1 = new int[4][, ] 
{
    new int[, ] { {1, 3}, {5, 7} },
    new int[, ] { {0, 2}, {4, 6}, {8, 10} },
    new int[, ] { {7, 8}, {3, 1}, {0, 6} },
    new int[, ] { {11, 22}, {99, 88}, {0, 9} } 
};

用户可以访问下面的示例中所示的各个元素,该示例显示第二个数组的元素[2,0]的值(即,值为8)

例子:

System.Console.Write("{0}", jagged_arr1[1][1, 0]);

程序:

// C# program to illustrate the Mixing of 1-D
// Jagged Array with the four 2-D array
using System;
namespace geeksforgeeks {
      
class GFG {
      
// Main Method
public static void Main()
{
  
    // Declaration and Initialization of 
    // Jagged array with 4 2-D arrays
    int[][, ] jagged_arr1 = new int[4][, ] {new int[, ] {{1, 3}, {5, 7}},
                                    new int[, ] {{0, 2}, {4, 6}, {8, 10}},
                                    new int[, ] {{7, 8}, {3, 1}, {0, 6}},
                                    new int[, ] {{11, 22}, {99, 88}, {0, 9}}};
  
    // Display the array elements:
    // Length method returns the number of
    // arrays contained in the jagged array
    for (int i = 0; i < jagged_arr1.Length; i++)
    {
          
        int x = 0;
          
        // GetLength method takes integer x which 
        // specifies the dimension of the array
        for (int j = 0; j < jagged_arr1[i].GetLength(x); j++) 
        {
              
            // Rank is used to determine the total 
            // dimensions of an array 
            for (int k = 0; k < jagged_arr1[j].Rank; k++)
                Console.Write("Jagged_Array[" + i + "][" + j + ", " + k + "]: "
                                            + jagged_arr1[i][j, k] + " ");
            Console.WriteLine();
        }
        x++;
        Console.WriteLine();
    }
}
}
}

输出:

Jagged_Array[0][0, 0]: 1 Jagged_Array[0][0, 1]: 3 
Jagged_Array[0][1, 0]: 5 Jagged_Array[0][1, 1]: 7 

Jagged_Array[1][0, 0]: 0 Jagged_Array[1][0, 1]: 2 
Jagged_Array[1][1, 0]: 4 Jagged_Array[1][1, 1]: 6 
Jagged_Array[1][2, 0]: 8 Jagged_Array[1][2, 1]: 10 

Jagged_Array[2][0, 0]: 7 Jagged_Array[2][0, 1]: 8 
Jagged_Array[2][1, 0]: 3 Jagged_Array[2][1, 1]: 1 
Jagged_Array[2][2, 0]: 0 Jagged_Array[2][2, 1]: 6 

Jagged_Array[3][0, 0]: 11 Jagged_Array[3][0, 1]: 22 
Jagged_Array[3][1, 0]: 99 Jagged_Array[3][1, 1]: 88 
Jagged_Array[3][2, 0]: 0 Jagged_Array[3][2, 1]: 9