TOC

This article is currently in the process of being translated into Chinese (~96% done).

Collections:

Arrays

数组是元素(如字符串)的集合。你可以用数组将元素聚集在一个组内,并对它们进行一些操作(如排序)。另外,为了接受多个元素输入(而不是单个),框架中的很多方法需要用到数组。因此,对数组有一定的了解是很重要的。

定义数组和定义变量类似,在数据类型后加一组中括号[],就像这样:

string[] names;

使用一个数组前需要将它实例化,就像这样:

string[] names = new string[2];

数字(2)是数组的大小,即数组可以容纳的元素数量。将元素加入数组也非常简单:

names[0] = "John Doe";

为什么是0?由于编程的事情东西太多了,计数要从0而不是从1开始。 因此第一个元素的索引是0,下一个是1,以此类推。 在填充数组时应该牢记这一点,如果过度填充会导致异常。当你看到初始化时数组的大小为2,会很自然地将数字0,1,2加入其中。 但此时已经多出一个元素了,如果你这样做,程序会抛出一个异常,我们将会在后面的章节中讨论异常。

在此之前,我们学习了循环,显然这很适用于数组。 获取数组内容最常见的方式,就是遍历它并对其中的每一个值进行一些操作。让我们用上面的数组举一个真实的例子:

using System;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = new string[2];

            names[0] = "John Doe";
            names[1] = "Jane Doe";

            foreach(string s in names)
                Console.WriteLine(s);

            Console.ReadLine();
        }
    }
}

我们使用了foreach循环,因为这是最简单的循环。当然我们也可以用其它类型的循环 ,for循环也适用于数组,如当你要为元素计数时,像这样:

for(int i = 0; i < names.Length; i++)
    Console.WriteLine("Item number " + i + ": " + names[i]);

事实上这很简单,我们使用数组的 Length 属性决定我们的循环要进行多少次迭代,然后我们使用计数器 (i) 输出我们正在进行哪一次迭代, 并将元素取出数组。就像我们使用一个数字,也就是所谓的索引,将元素加入数组一样,我们也可以用索引将元素取出来。

之前提到过可以用数组对一系列值进行排序,实际上很简单。 数组类包括很多用于处理数组的实用方法,为了尝试其它的东西,这个例子会使用数字代替字符串,但是对字符串也可以同样简单。我希望向你展示另外一种填充数组的方法。如果你有一个小的预定义的元素集合希望加入数组,这种方法更加简单,就像这样:

int[] numbers = new int[5] { 4, 3, 8, 0, 5 };

我们用一行代码创建了一个大小为5的数组,并填充了五个整数。通过这种方法填充数组有一个好处:编译器会检查并确认你没有在数组中加入过多的元素。尝试多加一个数字,你会看到编译器的抱怨。

事实上,可以更加像这样更加简洁:

int[] numbers = { 4, 3, 8, 0, 5 };

这样就变短了,并且你不需要指定大小了。但是第一种方法具有更强的可读性。

让我们试着对数组排序,这是一个完整的例子:

using System;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 4, 3, 8, 0, 5 };

            Array.Sort(numbers);

            foreach(int i in numbers)
                Console.WriteLine(i);

            Console.ReadLine();
        }
    }
}

这里唯一的新东西是 Array.Sort 指令。它可以接受不同的参数,用于不同类型的排序,在这个例子中,它只接受了我们的数组。如你所见,我们的数组已经排好序了。数组类也有其它的方法,例如 Reverse() 方法,你可以在文档中查看数组类的所有特性。

至此,我们使用的数组都是一维数组。但C#数组也可以是多维的,有时候也称为数组的数组。在C#中,多维数组有两种,一种是矩形数组,另一种是不规则数组。不同之处是矩形数组的所有维度都是同样大小的,因此称为矩形。不规则数组的不同维度可以大小不同。多维数组是一个重要的主题,有点超出本教程的范围了。

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!