多重数组:
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的帮助,应该不难理解!见笑!
是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
可以用代码试一下。
数组与其他引用型对象一样,本身也是一个引用型对象。
容易混淆的是多维数组和多重数组。
// 多维数组
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 类型的一维数组。
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的帮助,应该不难理解!见笑!
是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
可以用代码试一下。
数组与其他引用型对象一样,本身也是一个引用型对象。
容易混淆的是多维数组和多重数组。
// 多维数组
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 类型的一维数组。
scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)为 4 的 byte 类型的一维数组。
===>(去掉 “为 4”)
scores 则是一个多重数组,可以将其理解为一个长度为 5 的一维数组,其每一个元素是长度( ! 不确定 !)的 byte 类型的一维数组。
#4
谢谢两位!