C#4 - 数组

数组及相关基础

什么是数组

数组是一系列相同类型元素的集合,一组数字的数组语法如下:

1
int[] id = new int[10];

关键字new的应用是为了根据所给的大小,去分配记忆空间。而一旦数组已经声明了长度,之后就无法被改变,所以在声明数组的时候就应当合理分配其长度。

更多关于数组的资料,可以参考微软的c# array官方文献

案例:数组中数据的存入和获取

这个Demo展示了:

  • 如何声明和初始化一个数组

  • 使用索引获取数据

步骤:

  • 打开在之前的文章中之前创建的MyFirstProject,并且将以下的代码替换之前在Program.cs中的代码,下列代码将会展示如何声明和初始化数组元素。
1
2
3
4
5
6
7
8
// 声明一个数组
int[] id = new int[10];
int count = 1000;
// 初始化id
for(int i=0;i < id.Length;i++)
{
id[i] = ++count;
}
  • 新增以下代码去获取数组元素。

    1
    2
    3
    4
    5
    6
    // 打印数组元素
    Console.WriteLine("数组中的元素为:");
    for (int i = 0; i < id.Length; i++)
    {
    Console.Write(id[i]+"\t");
    }
  • 查看输出结果

数组中的元素为:

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 Press any key to continue . . .

  • 将以下代码加入Program.cs中,并查看数出结果:
1
id[10]=1011;

输出结果为:

数组中的元素为:

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.

    at MyFirstProject.Program.Main(String[] args) in MyFirstProject\MyFirstProject\Program.cs:line 25

原因是因为,数组的长度是固定的,而且数组的长度一但被声明,就无法被改变。id的长度是10,当id[10]=1011;这行代码尝试将新的id加入到数组的第11位的时候(数组的索引从0开始),就会报IndexOutOfRangeException的错。

Foreach循环

除了在C#3 - 流程控制遍历方式之外,C#也另外提供了一种不需要额外的变量去保存索引就能够遍历所有元素的方式。

以下代码就利用了foreach进行数组的遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;

namespace MyFirstProject{
class Program{
static void Main(string[] args)
{
// 以下数组是一个关于字符串的集合——一系列编程语言
string[] languages = {
"C Programming",
"C++ Programming",
"C# Programming",
"Java Programming",
};
// foreach用来查看数组中的每一个元素
// foreach的语法如下:
// foreach (var item in collection)
// {
// // ...
// }
// 如:
foreach (string language in languages)
{
Console.WriteLine(language);
}
}
}
}

多维数组

最简单的多维数组自然就是一个二维数组。一个二维数组就是一个关于一维数组的数组。

以下代码声明并遍历了一个二维数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;

namespace MyFirstProject{
class Program{
static void Main(string[] args)
{
// 二维数组声明语法 - int[row, column]
int[,] twoD = new int[3, 3] {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
// 外循环用来打印一行数组
for (int i = 0; i < 3; i++)
{
// 内循环用来打印一行数组中的每一列元素
for (int j = 0; j < 3; j++)
{
// twoD[i, j] 与 twoD[row, column] 相同
Console.Write(twoD[i, j] + " ");
}
Console.WriteLine();
}
// The Console.Write() 和 Console.WriteLine() 只是用来使得输出结果更加的美观

// 来自 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays
// 的3D数组
int[,,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } },
{ { 7, 8, 9 }, { 10, 11, 12 } } };
int[,,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } },
{ { 7, 8, 9 }, { 10, 11, 12 } } };
}
}
}

最后输出结果为:

1  2  3

4  5  6

7  8  9

C#中对数组的声明可以像Java一样使用int[][] array...这样声明,也可以像Demo中一样。

最后关于length

如果在Program.cs中加入以下两行代码:

1
2
Console.WriteLine(twoD.Length);
Console.WriteLine(array3D.Length);

输出的结果并不会是:

3

2

正确的输出结果是:

9

12

和其他的语言不一样的是,数组的length最后传回来的是数组中所有元素的和,而非单一行的长度。

-------The end of this article  Thank you for your reading-------
0%