C#快速入门(八):数组

一、数组

1.1 数组初始化

当需要存储多个相同类型的元素时,C# 数组是一种非常常用的数据结构。数组是一种固定长度的数据结构,它由连续的内存单元组成,每个内存单元存储一个元素。

静态初始化:指定数组元素的初始值。

// elementType[] arrayName;
// elementType 是数组中元素的类型,arrayName 是数组的名称
int[] myArray;

动态初始化:指定数组的长度,然后为每个元素分配空间。

// elementType[] arrayName = new elementType[length];
int[] myArray = new int[3]; 

注意:在指定了数组的大小后,如果不复制数组中的所有元素,就不能重新设置数组的大小。如果事先不知道数组中包含多少个元素,就可以使用集合。

int[] myArray = new int[4];
int[] myArray = new int[4] {4, 5, 6, 7}; // 数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用。
int[] myArray = new int[] {4, 5, 6, 7}; // 如果用花括号初始化数组,则还可以不指定数组的大小,因为编译器会自动统计元素的个数。
int[] myArray = {4, 5, 6, 7}; // 更简便的声明方式。

1.2 访问数组元素

通过索引器传递元素编号,就可以访问数组。索引器总是以0开头,表示第一个元素。可以传递给索引器的最大值是元素个数减1,因为索引从0开始。

int[] array = new[] { 4, 5, 6, 7 };
int v1 = array[0]; // 4
int v2 = array[1]; // 5
array[3] = 44; // { 4, 5, 6, 44 }

1.3 遍历数组

int[] myArray = { 1, 2, 3, 4, 5 };

for (int i = 0; i < myArray.Length; i++)
{
    Console.WriteLine("index:"+ i +"value:"+ myArray[i]);
}

1.4 使用引用类型

引用类型后面会详细讲解,目前就走个流程,让大家知道数组可以存储引用类型。

using System;
namespace UserDefinedException
{
    class TestTemperature
    {
        static void Main(string[] args)
        {
            Person[] myPersons = new Person[2];
            myPersons[0] = new Person("刘","备");
            myPersons[1] = new Person("曹", "操");

            Console.WriteLine(myPersons[0].ToString());
            Console.WriteLine(myPersons[1].ToString());
        }
    }
}

public class Person
{
    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
    public string FirstName { get; }
    public string LastName { get; }
    public override string ToString() => $"{FirstName} {LastName}";
}

但是必须注意,如果数组中的元素是引用类型,就必须为每个数组元素分配内存。如果使用了数组中未分配内存的元素,则会抛出 NullReferenceException 类型的异常。

二、多维数组

int[,] twoDim = new int[3, 3]; // 二维数组
twoDim[0, 0] = 1;
twoDim[0, 1] = 2;
twoDim[0, 2] = 3;
twoDim[1, 0] = 4;
twoDim[1, 1] = 5;
twoDim[1, 2] = 6;
twoDim[2, 0] = 7;
twoDim[2, 1] = 8;
twoDim[2, 2] = 9;

注意:声明数组后,就不能修改其阶数了。

int[,] twoDim = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; // 如果事先知道元素的值,就可以使用数组索引器来初始化多维数组。

注意:使用数组初始化器时,必须初始化数组的每个元素,不能把某些值的初始化放在以后完成。

三、锯齿数组

int[][] jagged = new int[3][];
jagged[0] = new int[2] { 1, 2 };
jagged[1] = new int[6] { 1, 2, 3, 4, 5, 6 };
jagged[2] = new int[3] { 1, 2, 3 };
for (int row = 0; row < jagged.Length; row++)
{
    for (int element = 0; element < jagged[row].Length; element++)
    {
        Console.WriteLine($"row: {row},element: {element}, value: {jagged[row][element]}");
    }
}
/*
row: 0,element: 0, value: 1
row: 0,element: 1, value: 2
row: 1,element: 0, value: 1
row: 1,element: 1, value: 2
row: 1,element: 2, value: 3
row: 1,element: 3, value: 4
row: 1,element: 4, value: 5
row: 1,element: 5, value: 6
row: 2,element: 0, value: 1
row: 2,element: 1, value: 2
row: 2,element: 2, value: 3
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值