大惊小怪的世界
Stay hungry,Stay foolish!

【C#】数组

数组是一个变量的索引列表,存储在数组类型的变量中。

数组有一个基本类型,数组中的各个条目都是这种类型。数组的条目通常称为元素。

第一个条目的索引是0 , 第二个条目的索引是1 , 以此类推。

01. 声明数组

<baseType>[] <name>;

其中,<baseType> 可以是任何变量类型,包括枚举和结构类型。

数组必须在访问之前初始化,数组的初始化有两种方式:可以字面值形式指定数组的完整内容,也可以指定数组的大小,再使用关键字 new 初始化所有数组元素。

int [] myIntArray = { 21, 2, 354, 7, 99 };

int [] myIntArray = new int [ 5 ] ;

这里使用关键字 new 显式地初始化数组,用一个常量值定义其大小。这种方式会给所有数组元素赋予同一个默认值,对于数值类型来说,其默认值是0。

也可以使用非常量的变量来进行初始化,例如:
int [] myint Array = new int [arraySize] ;

如果使用变量定义其大小,该变量
必须是一个常量,例如:

const int arraySize = 5;
int[] myintArray = new int[arraySize] { 21, 2, 354, 7, 99 };

如果省略了关键字const(常量),运行这段代码就会失败。

与其他变量类型一样,并非必须在声明数组的代码行中初始化该数组。

02. foreach 循环

foreach 循环可以使用一种简便的语法来定位数组中的每个元素:

foreach (<baseType> <name> in <array>)
{
    //can use <name> for each element
}

这个循环会迭代每一个元素,依次把每个元素放在变量 <name> 中,且不存在访问非法元素的风险。不需要考虑数组中有多少个元素,并可以确保将在循环中使用每一个元素。

foreach循环对数组内容进行只读访问,所以不能改变任何元素的值;for循环可以给数组元素赋值。

03. 使用 switch case 表达式进行模式匹配

可以基于变量的类型(如string或int数组)在 switch case 中进行模式匹配。因为变量的类型是已知的,所以可以访问该类型提供的方法和属性。

switch (<testVar>)
{
    case int value:
        <code to execute if <testVar> is an int>
        break;
    case string s when s.Length == 0:
        <code to execute if <testVar> is an string with a Length = 0>
        break;
    ...
    case null:
        <code to execute if <testVar> = null>
        break;
    default:
        <code to execute if <testVar> != comparisonVals>
        break;
}

case 关键词之后紧跟的是想要检查的变量类型(string、int等)。

在case语句匹配时,该类型的值将保存到声明的变量中。例如,若<testVar>是一个integer类型的值,则该integer的值将存储在变量 value 中。接下来将when关键字修饰符应用到了switch case表达式。when关键字修饰符允许扩展或添加一些额外的条件,以执行case语句中的代码。

04. 多维数组

多维数组是使用多个索引访问其元素的数组。

例如,假设要确定一座山相对于某个位置的高度,使用两个坐标X和Y来确定一个位置,把这个坐标用作索引,让数组hillHeight可以用每对坐标来存储高度,这就需要用到多维数组。

二维数组: <baseType>[,] <name>;

多维数组: <baseType>[,,,] <name>;

如果声明并初始化一个二维数组 hillHeight ,其基本类型为 double ,X大小是3,Y大小是4,则:

double[,] hillHeight = new double[3,4];

还可以使用字面值进行初始赋值:

double[,] hillHeight = { [ 1, 2, 3, 4], [ 2, 3, 4, 5], [ 3, 4, 5, 6] };

可以使用 foreach循环访问多维数组中的所有元素,方式与访问一维数组相同:

double[,] hillHeight = { [ 1, 2, 3, 4], [ 2, 3, 4, 5], [ 3, 4, 5, 6] };
foreach (double height in hillHeight)
{
    WriteLine($"(height)");
}

05. 数组的数组

数组中每一个元素都是另一个数组,也可以有数组的数组的数组,甚至更加复杂的数组。这些数组都必须是相同的数据类型。锯齿数组(jagged array),每行的元素个数不同。

声明数组的数组时,在声明中指定多个方括号对:

int [][] jaggedIntArray;

不能采用以下方式:

  • jaggedIntArray = new int[3][4];
  • jaggedIntArray = {{1,2,3}, {1}, {1,2} };

可以初始化包含其它数组的数组,然后依次初始化子数组:

jaggedIntArray = new int[2][];
jaggedIntArray[0] = new int[3];
jaggedIntArray[1] = new int[4];

也可以使用字面值赋值的改进形式:

jaggedIntArray = new int[3][] { new int[] {1,2,3}, new int[] {1}, new int[] {1,2} };

把数组的初始化和声明放在同一行上:

int [][] jaggedIntArray = { new int[] {1,2,3}, new int[] {1}, new int[] {1,2} };

赞(2) 打赏
声明:
1. 本站所有文章教程及资源素材均来源于网络与用户分享或为本站原创,仅限用于学习和研究,未经允许不得转载。
2. 如果内容损害你的权益请联系大惊小怪给予处理。
文章名称:《【C#】数组》
文章链接:https://dxd365.com/csharp-array/

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册