学习C#之数组

数组是引用类型

作用:数组使用复合数据类型,可以通过数组来存储批量数据。

在创建数组时要明确数组能容纳数据的大小,在后续的操作过程中不可以缩减数据或扩增数组。

//声明可以容纳5个整型数据值的数组
int[] array00 = new int[5];   

//更改引用变量array00的指向,使其指向空
array00 = null;     

//更改引用变量array00的指向
array00 = new int[2]; 

//通过引用变量对另一个引用变量赋值或初始化,两个引用变量指向同一个对象
int[] array = array00; 

一维数组

  • 声明创建样式:数据类型[] 数组名称 = new 数据类型 [数据个数]

  • 元素:数组对象由连续的要存放的底层数据类型的数据项组成,每个数据项称之为元素。

  • 元素的表示方式:从第一个元素开始,通过下标0~元素个数-1来依次表示。

  • 表示样式:数组名称[下标] 也称索引。下标的范围必须大于等于0且小于元素总数,不可以越界。

  • 系统会对数组对象中的元素做默认初始化处理,初始化为默认值。

  • 引用类型默认值为null,整型默认值为0,浮点类型默认值为0.0,布尔类型默认值为false。

//当前数组由三个int类型的元素组成,分别是array01[0]、array01[1]、array01[2]
int[] array01 = new int[3];

//除了字符串之外,直接打印引用变量打印出的不是对象包含的数据,而是引用变量指向的对象类型
Console.WriteLine(array01);

//访问数组存储的具体数据,要通过指定元素进行访问
Console.WriteLine(array01[2]);

//在对象创建后面跟随{},{}中是各个对应元素的数据,按照顺序依次对各个元素做初始化操作
//数据个数必须等同于元素个数,数据之间通过逗号隔开
bool[] array02 = new bool[4] { true, true, false, true };
Console.WriteLine(array02[3]);

//在数组对象显式初始化并且声明引用变量的同时,可以省略创建数组的new表达式
float[] array03 = { 9.4f, 3.5f, 1.2f};  
//等价于 float[] array03 = new float[3] { 9.4f, 3.5f, 1.2f};
Console.WriteLine(array03[1]);

//在数组对象显式初始化时,可以省略数组元素个数
array03 = new float[]{ 4.3f};

//不能直接对整个数组赋值,给数组赋值要通过对指定的元素赋值
array03[0] = 1.8f;
Console.WriteLine(array03[0]);

float[] array04 = { 6.7f, 3, 8.2f};
//把=右侧引用变量中存放的对象引用赋值给左侧的引用变量,两个引用变量指向同一个对象
array03 = array04;

//遍历数组:
//元素有下标,下标有规律和范围(0~元素个数-1)
//可以通过系统提供的函数来获取数组元素长度:数组名称.Length; 返回int类型数据
int count = array03.Length;
Console.WriteLine(count);

//第一种遍历方式:for、while循环
for (int i = 0; i < array03.Length; i++) 
{
    Console.Write(array03[i] + "  ");  //使用迭代变量表示元素下标
}

第二种遍历方式:foreach

  • 样式:
    * foreach(元素类型 迭代变量名称 in 要遍历的集合类型对象名称)
    * {
    * 方法体
    * }
  • foreach语句在遍历完整个集合对象之后会自动终止
  • 无法获取明确的元素变量,只能通过迭代变量接收对应元素的数据值,因此foreach遍历无法修改元素
  • foreach语句中的迭代变量不可以修改
foreach (float element in array04) 
{
    Console.Write(element + "  ");
}

二、二维数组

  • 作用:用来存储表示行列对其的矩阵数据

  • 二维数组的元素是不可直接访问操作的一维数组:
    普通多维数组的元素就是对应降一维的数组, 但是不支持访问操作它包含的数组,只能获取处理最底层的数据项元素。

  • 维度:几位数组,维度就是几。在C#中的表示形式:[]中通过分为几块空间就是几维

  • 维度长度:各个维度有对应的长度表示当前维度的元素个数。多维数组,[]中从高到低为多维到低维,分别对应具体的元素长度。

  • 数组长度:各个维度的维度长度的乘积。底层数据项的总数

  • 二维数组样式:
    最底层的数据项类型[,] 数组名称 = new 最底层的数据项类型[二维维度长度, 一维维度长度];

  • 系统在数组没有明确初始化时,会默认为其做初始化操作。初始化为最底层数据项的默认值

  • 二维数组的底层元素表示:
    数组名[二维数组的元素下标 i, 包含的一维数组的元素下标 j ]
    i 范围:0~二维维度长度-1
    j范围 : 0~一维维度长度-1

//一个拥有3个元素的二维数组,每个元素是元素个数为5的一维数组
int[,] array = new int[3, 5];  //3是二维维度长度,5是一维维度长度
Console.WriteLine(array[0, 3]);

//二维数组显式初始化:依次对最底层的元素做初始化处理
int[,] array00 = new int[3, 5] { { 12, 8, - 9, 0, 3 }, { -5, 7, 10, 34, 89 }, { 67, 2, 3, 6, 19 } };
Console.WriteLine(array00[1,1]);

//可以在显式初始化二维数组和声明引用变量的同时,省略new表达式,系统会自动创建对应的二维数组
int[,] array01 = { { 1, 2, 3}, { 5, 6, 7} };  //new int[2, 3];

//在显式初始化二维数组的同时,可以省略创建数组时的各维度长度,若要省略,各维度长度必须全部省略
array01 = new int[,] { { 1}, { 2}, { 3} };  //new int[3, 1];

//赋值:给多维数组赋值,要通过给最底层的一维数组的元素赋值
array01[1, 0] = 8;
Console.WriteLine(array01[1, 0]);
  • 获取维度长度的函数:数组名称.GetLength(指定维度下标),返回整型数据值

  • 指定维度下标通过0~维度数-1 从高维到低维是从0~维度数-1

  • 二维数组:二维用0表示,一维用1表示

  • 遍历方式:

//第一种:for、while
//外层是二维维度下标:行
for (int i = 0; i < array00.GetLength(0); i++) 
{
    //内层是一维维度下标:列
    for (int j = 0; j < array00.GetLength(1); j++) 
    {
        Console.Write(array00[i, j] + "  ");
    }
    Console.WriteLine();
}

//第二种:foreach
//foreach拿不到中间层级的数据,而是直接获取到最底层的元素,所以只需一层
foreach (int element in array01) 
{
  Console.WriteLine(element);
}

三、锯齿数组

  • 锯齿数组是一维数组,锯齿数组的元素是引用类型,元素存储的数据是长度相同或不同的数组对象引用。

  • 锯齿数组的样式:由单独的任意多个[]排列组成

  • 在锯齿数组没有显式初始化时,系统会为其做默认初始化处理。引用类型的默认值为null。

  • 创建数组对象时,第一个[]中是锯齿数组的元素个数。第二个[]中不可以给值,因为锯齿数组元素可以是数组长度不同的数组对象,因此不可以限定长度。

  • 获取锯齿数组元素:数组名称[下标] 锯齿数组可以通过[]的排列组合获取其下各级的数据

//声明创建元素为int[]类型的具备两个元素的锯齿数组
int[][] array = new int[2][];
Console.WriteLine(array[0]);

int[][] array01 = new int[2][] { new int[3]{ 1, 2, 3}, new int[2]{ 4, 5} };
Console.WriteLine(array01[0]);
int[] arr00 = array01[0];  //获取锯齿数组的第一个元素
//通过组合形式,获取底层数据项
int num1 = array01[1][1];
Console.WriteLine(num1);

//可以通过[]组合的方式对各层级元素进行赋值操作
array01[0] = new int[3];  //使用新的数组对象对锯齿数组的第一个元素赋值
Console.WriteLine(array01[0][0]);
array01[1][1] = 10; //给锯齿数组的第二个元素包含的第二个元素赋值
Console.WriteLine(array01[1][1]);

//遍历锯齿数组
//for\while循环
//锯齿数组是一维数组,一维数组的数组长度等同于维度长度
for (int i = 0; i < array01.Length; i++) 
{
   //获取对应的子数组,进行遍历
   int[] sArray = array01[i];
   for (int j = 0; j < sArray.Length; j++) 
   {
       Console.Write(array01[i][j] + "  " );
   }
   Console.WriteLine();
}

//foreach
//获取锯齿数组中的一维数组锯齿元素
foreach (int[] obj in array01) 
{
   //获取一维数组中的元素
   foreach (int element in obj) 
   {
      Console.Write(element + "  ");
   }
   Console.WriteLine();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值