什么是多重数组?

时间:2021-05-23 22:06:41
下面的例子我看不明白,请高手指点指点!
多重数组:
byte[][] scores = new byte[5][];
for (int x = 0; x < scores.Length; x++) 
{
scores[x] = new byte[4];
}
能不能看做是scores[5,4]?

谁能解说下下面的多重数组?
000: // Arrays\arrays.cs
001: using System;
002: class DeclareArraysSample
003: {
004: public static void Main()
005: {
006: // Single-dimensional array
007: int[] numbers = new int[5];
008: 
009: // Multidimensional array
010: string[,] names = new string[5,4];
011: 
012: // Array-of-arrays (jagged array)
013: byte[][] scores = new byte[5][];
014: 
015: // Create the jagged array
016: for (int i = 0; i < scores.Length; i++)
017: {
018: scores[i] = new byte[i+3];
019: }
020: 
021: // Print length of each row
022: for (int i = 0; i < scores.Length; i++)
023: {
024: Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
025: }
026: }
027: }
它的输出是:

Length of row 0 is 3
Length of row 1 is 4
Length of row 2 is 5
Length of row 3 is 6
Length of row 4 is 7

谢谢!!

4 个解决方案

#1


//Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
是scores.Length=5,一开始定义的;(013: byte[][] scores = new byte[5][];)
scoresp[i].Length是多重数组所包含每个数组的的长度(
016: for (int i = 0; i < scores.Length; i++)
017: {
018: scores[i] = new byte[i+3];
019: })定义过程;
scores5包含了5个数组。
我可能说的不明白,你可一仔细阅读一下.NET的帮助,应该不难理解!见笑!

#2


多重数组,也称为数组的数组。
数组与其他引用型对象一样,本身也是一个引用型对象。
容易混淆的是多维数组和多重数组。

// 多维数组
string[,] names = new string[5,4];
names 是一个二维数组(二维及以上的称为多维数组),可以将其理解为一个长度为 5 的一维数组,但其每一个元素是长度( ! 必须都 !)为 4 的 string 类型的一维数组。从结构上来说,它是规则的,必须是 5 * 4的。

// 多重数组
byte[][] scores = new byte[5][];
scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)为 4 的 byte 类型的一维数组。从结构上来说,它是不规则的,除了本身的长度为固定的 5,其元素所引用的数组长度是可变的。从代码中可以看得出来。

但两者有一个共同点,在整个数组中每一个元素的类型必须是一致的,对于 names,都必须是 string, 而对于 scores 则都必须是 byte。

关键的区别,一个是规则的,一个是不规则的。这就提供了使用上的灵活性。

还有一点必须指出,在本质上,names 是一个二维数组,而 scores 是一个一维数组。
names.Rank == 2             
names.GetLength(0) == 5
names.GetLength(1) == 4
names.Length == 20

scores.Rank == 1
scores.GetLength(0) == 5
scores.GetLength(1) == 4  // 此句会导致异常,因为不存在第 2 个维度。
scores.Length == 5

可以用代码试一下。

#3


由于粗心,必须更正一下:

scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)为 4 的 byte 类型的一维数组。

===>(去掉 “为 4”)

scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)的 byte 类型的一维数组。

#4


谢谢两位!

#1


//Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
是scores.Length=5,一开始定义的;(013: byte[][] scores = new byte[5][];)
scoresp[i].Length是多重数组所包含每个数组的的长度(
016: for (int i = 0; i < scores.Length; i++)
017: {
018: scores[i] = new byte[i+3];
019: })定义过程;
scores5包含了5个数组。
我可能说的不明白,你可一仔细阅读一下.NET的帮助,应该不难理解!见笑!

#2


多重数组,也称为数组的数组。
数组与其他引用型对象一样,本身也是一个引用型对象。
容易混淆的是多维数组和多重数组。

// 多维数组
string[,] names = new string[5,4];
names 是一个二维数组(二维及以上的称为多维数组),可以将其理解为一个长度为 5 的一维数组,但其每一个元素是长度( ! 必须都 !)为 4 的 string 类型的一维数组。从结构上来说,它是规则的,必须是 5 * 4的。

// 多重数组
byte[][] scores = new byte[5][];
scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)为 4 的 byte 类型的一维数组。从结构上来说,它是不规则的,除了本身的长度为固定的 5,其元素所引用的数组长度是可变的。从代码中可以看得出来。

但两者有一个共同点,在整个数组中每一个元素的类型必须是一致的,对于 names,都必须是 string, 而对于 scores 则都必须是 byte。

关键的区别,一个是规则的,一个是不规则的。这就提供了使用上的灵活性。

还有一点必须指出,在本质上,names 是一个二维数组,而 scores 是一个一维数组。
names.Rank == 2             
names.GetLength(0) == 5
names.GetLength(1) == 4
names.Length == 20

scores.Rank == 1
scores.GetLength(0) == 5
scores.GetLength(1) == 4  // 此句会导致异常,因为不存在第 2 个维度。
scores.Length == 5

可以用代码试一下。

#3


由于粗心,必须更正一下:

scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)为 4 的 byte 类型的一维数组。

===>(去掉 “为 4”)

scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)的 byte 类型的一维数组。

#4


谢谢两位!