C#数组

和其他编程语言一样 C# 中也支持数组,数组是一个用来存储相同类型数据的、固定大小的、具有连续内存位置的顺序集合。数组中的每个元素都对应一个索引值,索引从 0 开始依次递增,我们可以通过索引来访问数组中的指定元素。

假如我们要存储 100 名学生的分数,若使用普通变量的话可能需要定义 100 整型变量,例如 number0、number1、...、number99。而如果使用数组就简单的多了,只需要定义一个长度为 100 的整型数组,例如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99]([ ]中的数字就是数组的索引)就可以访问数组中的每个元素。

所有数组都是由连续的内存位置组成,最低的内存地址对应第一个元素,最高的内存地址对应最后一个元素,如下图所示:

数组
图:数组

1、声明数组

在 C# 中声明一个数组的语法格式如下:

data_type[] array_name;

其中,data_type 用来指定数组中元素的类型;[ ] 用来指定数组的维度;array_name 为数组的名称。

示例代码如下:

int[] array1            // 声明一个整型数组
double[] array2     // 声明一个浮点型数组

2、初始化数组

仅仅是声明数组还不够,数组只有经过初始化后才可以为其中的每个元素赋值。因为数组是引用类型的,所以您需要使用 new 关键字来对数组进行初始化,例如:

int[] array1                       // 声明一个整型数组
array1 = new int[10]        // 初始化数组 array1
double[] array2                // 声明一个浮点型数组
array2 = new double[5]   // 初始化数组 array2

另外,数组的声明和初始化还可以放在一起进行,如下所示:

int[] array1 = new int[10]                // 初始化一个长度为 10 的整型数组
double[] array2 = new double[5]    // 初始化一个长度为 5 的浮点型数组

提示:初始化数组的过程中,new int[10] 中[ ] 里面的数字代表数组的长度,也就是数组中最多可以存放多少个元素,我们可以根据需要来设定数组的长度。

3、为数组元素赋值

我们可以使用数组的索引来为数组中的各个元素赋值,如下所示:

int[] arr = new int[10];
arr[0] = 10;
arr[1] = 11;

单独为数组中的各个元素赋值太过麻烦了,我们也可以在声明数组时直接为数组赋值,只需要将数组中的每个元素依次放入到一个{ }中,并将每个元素使用, 分隔开即可,如下所示:

double[] arr1 = {96.5, 98.0, 99.5, 90.0};
int[] arr2 = {1, 2, 3, 4, 5, 6, 7, 8, 9};

使用上面的方法并不用提前设定数组的长度,那如果想要指定数组的长度该怎么办呢?只需要像下面这样即可:

double[] arr1 = new double[4]{96.5, 98.0, 99.5, 90.0};
int[] arr2 = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

当然像下面这样省略数组的长度也是可以的,例如:

double[] arr1 = new double[]{96.5, 98.0, 99.5, 90.0};
int[] arr2 = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

数组也可以像变量一样,使用一个定义好的数组为另一个相同类型的数组赋值,这种情况下,两个数组将指向相同的内存地址,如下所示:

int[] arr1 = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] arr2 = arr1;

提示:当我们创建一个数组时,C# 的编译器会根据数组类型隐式的为数组中的每个元素初始化一个默认值。例如 int 类型的数组中所有元素都会被初始化为 0。

4、访问数组中的元素

我们可以通过数组的索引(也可称为下标)来访问数组中的指定元素,只需要在数组名的后面加上一个方括号[ ],并在其中填写对应的数组索引即可,如下所示:

int[] arr = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int a = arr[0];

【示例】下面通过示例演示一下如何访问数组中的每个元素:
using System;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            int[] arr = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
            for(int i = 0; i < 10; i++){
                Console.WriteLine("arr[{0}] = {1}", i, arr[i]);
            }
            Console.ReadLine();
        }
    }
}
运行结果如下:

arr[0] = 0
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4
arr[5] = 5
arr[6] = 6
arr[7] = 7
arr[8] = 8
arr[9] = 9

5、使用 foreach 遍历数组

前面的示例中我们使用了 for 循环来访问数组中的每个元素,另外还可以使用 foreach 循环来遍历数组中的元素,示例代码如下:
using System;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            int[] arr = new int[]{100, 101, 102, 103, 104, 105, 106, 107, 108, 109};
            int index = 0;
            foreach(int i in arr){
                Console.WriteLine("arr[{0}] = {1}", index, i);
                index++;
            }
            Console.ReadLine();
        }
    }
}
运行结果如下:

arr[0] = 100
arr[1] = 101
arr[2] = 102
arr[3] = 103
arr[4] = 104
arr[5] = 105
arr[6] = 106
arr[7] = 107
arr[8] = 108
arr[9] = 109