C#多维数组和数组的数组有什么区别?各在什么不同情况下使用?
2个回答
展开全部
多维数组,用[,]定义,int[2,3],这样就是一个2*3的矩阵,
也可以用[][]定义,int[2][]就是一个数组的数组,可以模拟多维数组,但不是多维数组,
int[2][]
thisArray=new
int[]{new
int[3],new
int[4]};
这样是{}里的两个数组的数组,
用处不同,不好比较,多使用多看多写代码就知道了。
非要做比较,我举一个小例子:
在做一些游戏要用到矩阵来保存数据时,用二维数组方便,用一位数组就要经过算法处理,
比如保存一个3*3的矩阵:
二维数组:
int[,]
binary=new
int[3,3];
使用是用二重循环遍历,
for(int
i=0;i<3;i++){
for(int
j=0;j<3;j++){
//操作binary[i,j]
}
}
用一位数组:
int[]
one=new
int[9];
使用是用循环遍历,要访问
for(int
i=0;i<3;i++){
for(int
j=0;j<3;j++){
//操作one[i*3+j]
}
}
也可以用[][]定义,int[2][]就是一个数组的数组,可以模拟多维数组,但不是多维数组,
int[2][]
thisArray=new
int[]{new
int[3],new
int[4]};
这样是{}里的两个数组的数组,
用处不同,不好比较,多使用多看多写代码就知道了。
非要做比较,我举一个小例子:
在做一些游戏要用到矩阵来保存数据时,用二维数组方便,用一位数组就要经过算法处理,
比如保存一个3*3的矩阵:
二维数组:
int[,]
binary=new
int[3,3];
使用是用二重循环遍历,
for(int
i=0;i<3;i++){
for(int
j=0;j<3;j++){
//操作binary[i,j]
}
}
用一位数组:
int[]
one=new
int[9];
使用是用循环遍历,要访问
for(int
i=0;i<3;i++){
for(int
j=0;j<3;j++){
//操作one[i*3+j]
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先定义不同
多维数组:private
int[,]
_multi
;
数组的数组(也即锯齿数组)private
int
[][]
_jagged;
再次实例化不同
多维:_multi=new
int
[10,10];
锯齿数组:_jagged=new
int[2][];
_jagged[0]=new
int[5];
-jagged[1]=new
int[9];
第3访问遍历方式不同:
多维:
foreach(int
e
in
_multi)
{
Console.Write(e.ToString());
}
锯齿数组:
foreach(int[]
row
in
_multi)
{
foreach(int[]
e
in
row)
{
Console.Write(e.ToString());
}
}
第4可定义维度不同
多维的每个维度固定,锯齿数组每个维度不固定,因此得名锯齿数组。
最后性能的差异:
多维:维度长度固定,利用这个特性,编译器可以生产更加高效的初始代码,
锯齿:数组越大维数越多,初始化的代码越多,列方向遍历的效率低
多维数组:private
int[,]
_multi
;
数组的数组(也即锯齿数组)private
int
[][]
_jagged;
再次实例化不同
多维:_multi=new
int
[10,10];
锯齿数组:_jagged=new
int[2][];
_jagged[0]=new
int[5];
-jagged[1]=new
int[9];
第3访问遍历方式不同:
多维:
foreach(int
e
in
_multi)
{
Console.Write(e.ToString());
}
锯齿数组:
foreach(int[]
row
in
_multi)
{
foreach(int[]
e
in
row)
{
Console.Write(e.ToString());
}
}
第4可定义维度不同
多维的每个维度固定,锯齿数组每个维度不固定,因此得名锯齿数组。
最后性能的差异:
多维:维度长度固定,利用这个特性,编译器可以生产更加高效的初始代码,
锯齿:数组越大维数越多,初始化的代码越多,列方向遍历的效率低
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询