JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

C# - 多维与交错数组 036(交错数组和多维数组有何区别?)

wys521 2024-11-16 01:46:33 精选教程 29 ℃ 0 评论

之前说的数组是一维数组,也是最简单最常用的数组,必须理解掌握,下面两种数组了解一些基本的知识即可,有兴趣或必要的可自行查找相关资料进行深入学习

数组中维的含义:就是一个数组中某个元素,需要使用几个数字的下标来表示这个元素,这几个数字就是几维;如下标使用一个数字的表示一维,使用两个的表示二维等等

多维数组:使用多个下标表示一个唯一的元素;常见的有二维与三维数组

一维数组可以比喻为一条线,使用线上的点表示元素,因此可以使用一个下标表示

二维数组可以比喻为一个表格,该表格有行列组成,使用两个下标表示一个元素

三维数组可以比喻为一个立方体,使用三个下标表示唯一的一个元素

//二维数组[,]使用一个逗号隔开 
//开辟一个一行一列的数组
int[,] arr=new int[1,1];
//三维数组[,,]使用两个逗号隔开
//开辟一个一行一列一高的三维数组
int[,,] arr=new int[1,1,1];
//三维以上[]使用至少三个及以上逗号隔开....

二维数组

也称矩阵数组即每一行都具有相同数量的元素

二维数组的语法格式

数据类型[,] 数组名=new 数据类型[长度1,长度2];
//声明二维数组
//中括号里面两个下标之间使用逗号隔开
int[,] arr=new int[2,3];
//声明了一个两行三列的int类型数组,每个元素也是int类型的数据
//二维数组声明方式
//声明一个两行三列的int类型数组

//方式1 只声明未赋值
int[,] arr=new int[2,3];

//方式2 声明并初始化数组
int[,] arr2 = { { 1, 2, 3 }, { 4, 5, 6 } };
//最外层大括号表示整个数值
//里面的两个大括号表示二维数组行列
//元素中存储的值

//方式3 声明并赋值
int[,] arr3 = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
//保证每一行的元素个数(列数)相同
int[,] arr3 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };

//方式2与方式3中的数组可以称之为匿名数组
//编译器会自动给其加名字,以后说到匿名方法,类等查看反编译代码

//二维数组的注意事项与一维数组几乎一样,不再赘述

二维数组的默认值,访问,赋值,修改

int[,] arr = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
//二维数组的默认值与一维数组一样
//默认值也是根据声明类型的不同而不同,不再赘述
//根据下标访问二维数组具体元素
//访问数组的第4个元素
arr[1,0]=4;//数组第四个元素
//修改赋值
arr[1,0]=6;//将数组第四个元素重新修改赋值为6

二维数组(或多维数组)的属性与方法

Rank属性:获取当前数组的维数

Length属性:二维数组的长度即元素总个数(两个长度相乘)

GetLength(维的索引)方法:获取二维数组中指定维的长度,索引从0开始

遍历数组

遍历二维数组元素,需要使用双层嵌套循环

int[,] arr = new int[2, 3] { { 21, 56, 39 }, { 14, 59, 86 } };
arr[1, 0] = 6;//重新修改赋值
//遍历二维数组元素
//GetLength(0)获取行的个数
for (int i = 0; i < arr.GetLength(0); i++)//行
{
  //GetLength(1)获取列的个数
    for (int j = 0; j < arr.GetLength(1); j++)//列
    {
        Console.WriteLine("第{0}行第{1}列的值为 {2}", i, j, arr[i, j]);
    }
}
Console.ReadKey();

求和,平均值,最大值,最小值

二维数组中没有与一维数组一样的快捷方法(以后自写一个求常用值的方法,不知最新.Net框架中是否含有类似一维数组的快捷方法)

int[,] arr = new int[2, 3] { { 21, 56, 39 }, { 14, 59, 86 } };
int sum = 0, avg = 0, max = arr[0, 0], min = arr[0, 0];
for (int i = 0; i < arr.GetLength(0); i++)
{
    for (int j = 0; j < arr.GetLength(1); j++)
    {
        sum += arr[i, j];//求和   
        if (arr[i, j] > max)//求最大值
        {
            max = arr[i, j];
        }
        if (arr[i, j] < min)//求最小值
        {
            min = arr[i, j];
        }
    }
}         
avg = sum / arr.Length;
Console.WriteLine("和为{0} 最大值为{1} 最小值为{2} 平均值为{3}", sum, max, min, avg);
Console.ReadKey();

排序

将二维数组元素转移到一维,再使用之前的冒泡排序或Sort()方法

int[,] arr = new int[2, 3] { { 21, 56, 39 }, { 14, 59, 86 } };
int count = 0;//用于一维数组的下标
//声明一个一维数组
int[] nums = new int[arr.Length];
//将二维中的元素赋值到一维数组中
for (int i = 0; i < arr.GetLength(0); i++)
{
    for (int j = 0; j < arr.GetLength(1); j++)
    {
        nums[count] = arr[i, j];
        count++;
    }
}
//使用冒泡排序方法
int temp = 0, len = nums.Length - 1;
for (int i = 0; i < len; i++)
{
    for (int j = 0; j < len - i; j++)
    {
        //第一个元素与后面一个元素比较
        //如果前面大于后面就交换数据即挪位置
        if (nums[j] > nums[j + 1])
        {
            temp = nums[j];
            nums[j] = nums[j + 1];
            nums[j + 1] = temp;
        }
    }
}
//快捷方法 引入using System.Linq;命名空间
//Array.Sort(nums);
//打印输出排序后的数据
for (int i = 0; i < nums.Length; i++)
{
    Console.Write("{0}  ", nums[i]);
}

交错数组

交错数组有的叫锯齿数组或数组的数组等诸多名称都一个意思

交错数组的本质是一个一维数组即本质是一维数组(使用Rank属性查看),但是这个数组的元素还是一维数组,因此叫做数组的数组;数组中每个数组的长度不一因此叫做锯齿数组

交错数组的语法格式

数据类型[][] 数组名称 =new [长度1][长度2];

第一个下标(长度1)必有,第二个下标(长度2)可省略

第一个长度用于声明时指定需要在内存中开辟多大的空间

第二个长度可以指定或者初始化时,根据指定或初始化时元素的个数决定

//声明方式
//声明有两个一维数组做元素的交错数组
//方式1
int[][] arr = new int[2][];
//方式2
int[][] arr1 = new int[2][] { new int[] { }, new int[] { } };
//方式3
 int[][] arr2 = { new int[] { }, new int[] { } };
//访问/赋值/修改
//方式1的赋值
 int[][] arr = new int[2][];
//先将交错数组元素的数组声明出来
 arr[0] = new int[2];
 arr[1] = new int[2];
//再逐个赋值
 arr[0][0] = 1;
 arr[0][1] = 2;
 arr[1][0] = 1;
 arr[1][1] = 2;
//方式2与方式3赋值方式一样
int[][] arr1 = new int[2][] {
  //可以称之为锯齿数组
  //第一个元素是有两个元素的数组
    new int[] {1,2},
 //第二个元素是有三个元素的数组     
    new int[] {1,2,3 }
};
//两个中括号中分别存储
int[][] arr = new int[2][];为例
第一个中括号中存储的是一维数组的地址
第二个中括号中存储的是一维数组元素的值
 int[][] arr2 = { new int[] { 4, 5, 6 }, new int[] { 6, 7, 8 } };
int[0]存储的是new int[] { 4, 5, 6 }数组在内存中的地址
nt[0][]存储的是 4, 5, 6 是数组内元素的值

交错数组的长度就是元素中数组的长度相加的和(二维数组是相乘)两者都可以使用Length属性得到数组的总个数

遍历交错数组

//未声明交错数组中元素的数组 报异常
//相当于 int[] nums1=null;  nums2=null;
int[][] arr = new int[2][];
for (int i = 0; i < arr.Length; i++)
{
    for (int j = 0; j < arr[i].Length; j++)
    {
        Console.WriteLine("{0}  ", arr[i][j]);
    }
}
Console.ReadKey();
int[][] arr1 = new int[2][] { new int[] { }, new int[] { } };
//已声明数组,只是数组中无元素而已
//自己测试类似交错数组
//int[][] arr1 = new int[2][] { new int[] { 1 }, new int[] { 1,2,3 } };
for (int i = 0; i < arr1.Length; i++)
{
    for (int j = 0; j < arr1[i].Length; j++)
    {
        Console.WriteLine("{0}  ", arr1[i][j]);
    }
}
Console.WriteLine("遍历arr1完毕");
int[][] arr2 = { new int[] { 4, 5, 6 }, new int[] { 6, 7, 8 } };
for (int i = 0; i < arr2.Length; i++)
{
    for (int j = 0; j < arr2[i].Length; j++)
    {
        Console.WriteLine("{0}  ", arr2[i][j]);
    }
}
Console.WriteLine("遍历arr2完毕");
Console.ReadKey();

二维数组与交错数组的区别:

1)二维数组中的每一行都具有相同数量的元素;交错数组中各个行元素的数量可以不同

2)二维数组本质上也是以数组作为数组元素的数组,也称为矩阵数组

3)交错数组是元素为数组,交错数组元素的维度和大小可以不同,因此被称为“数组的数组”或锯齿数组(相对于二维数组来说)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表