怎么样理解多下标数组的维数

.Net技术 码拜 8年前 (2016-04-29) 1021次浏览
在网上没能查到相关的概念,官方文档里也没有看到对维数的较为清晰地定义,感觉只是模糊的说数组可以有多个维度。
那么本人的问题在于,多下标数组的维数到底是什么意思呢?
书里提供的例子如下

int[,] array1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6} };

通过GetLength方法可以得到数组信息如下:

int Array1 = array1.GetLength(0);
Console.WriteLine ("  " + Array1);
int Array2 = array1.GetLength(1);
Console.WriteLine("  " + Array2);

输出结果为“2\n3”
书中对GetLength方法的描述是其返回数组某一维的长度,那么这样翻译以上两行代码,其含义能否为输出数组第0维长度和数组的第1维长度呢?
但这产生了两个令本人费解的问题:
1.在这之前学过的单下标数组应该是最简单的数组了吧?例如:

int [] c = new int [12]

定义了一个包含有12个元素的单下标数组,我们称其为一维数组。那么多下标数组中的“第0维长度”是什么?或许有0维数组的概念?书上说返回的第0维长度可以认为是第0列,那么能否说明数组的维数就是列数?第几维就是第几列?
2.能看出来GetLength方法的第一行代码输出了数组的行数,第二行代码输出了数组的列数,麻烦通过问题1的答案解释一下这种输出的原因?
c#小白一枚,高手勿喷

解决方案

5

把多维数组立着写,如下图。那么,0维的长度就是4。
{
{ /**/},
{ /**/},
{ /**/},
{ /**/},
};
假设把/**/换成:
{/****/},
{/****/},
{/****/},
那么,第1维的长度就是3。
假设把/****/换成:
1,2
那么,他们就是第2维,长度为2。
总结:

int[,,] mda = new int[4, 3, 2]
{
    {
        {1,2},
        {2,3},
        {4,4 },
    },
    {
        {0,0},
        {0,0},
        {0,0},
    },
    {
        {0,0},
        {0,0},
        {0,0},
    },
    {
        {0,0},
        {0,0},
        {0,0},
    },
};

15

引用:
Quote: 引用:

数方括号里逗号的数量,n个逗号就是n+1维数组
第k维的长度,就是第k个逗号后面那个数字,第0维就是方括号里的第1个数字
例如int[20,30,40]
有2个逗号,所以是3维数组
第1维的长度就是第1个逗号后面的数字:30

那这样的话,例如

int[,] array1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6} };

那它的第0维应该是{1, 2, 3}吧?那他的长度不应该是3么?为什么会输出2呢?

还不理解的话,创建的时候写全了:
int[,] array1 = new int[2,3] { { 1, 2, 3 }, { 4, 5, 6} };
假如你写的长度是对的话,编译器不会出错
否则你试下3,2,会有错误提示的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样理解多下标数组的维数
喜欢 (0)
[1034331897@qq.com]
分享 (0)