开发手册 欢迎您!
软件开发者资料库

C# 数组(Arrays)

数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。本文主要介绍C# 数组

1、C# 数组

数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。

要声明数组,要使用方括号定义变量类型:

string[] langs;

下面声明了一个包含字符串数组的变量。要向其中插入值,我们可以使用数组字面量,就是将值放在以逗号分隔的花括号内,例如:

string[] langs = {"csharp", "java", "python", "wonhero"};

要创建整数数组,可以编写:

int[] myNum = {10, 20, 30, 40};

2、访问数组中元素

可以通过数组索引来访问数组元素。

该语句访问langs中第一个元素的值:

例如:

string[] langs = {"csharp", "java", "python", "wonhero"};Console.WriteLine(langs[0]);// 输出 c

注意:数组索引以0开头:[0]是第一个元素。 [1]是第二个元素,依此类推。

3、修改数组中元素

要更改指定元素的值,可以使用数组索引来修改,例如:

例如:

langs[0] = "javascript";

例如:

string[] langs = {"csharp", "java", "python", "wonhero"};langs[0] = "javascript";Console.WriteLine(langs[0]);

4、数组长度

在C# 中,数组是非原始数据类型,这意味着它是具有不同方法的对象,可用于获取有关此对象的信息。例如,要找出一个数组有多少个元素,可以使用Length属性:

例如:

string[] langs = {"csharp", "java", "python", "wonhero"};Console.WriteLine(langs.Length);// 输出 4

5、循环遍历数组

可以使用for循环遍历数组元素,并通过使用Length属性来指定循环应运行的次数。

下面示例输出langs数组中的所有元素:

例如:

string[] langs = {"csharp", "java", "python", "wonhero"};for (int i = 0; i < langs.Length; i++) {  Console.WriteLine(langs[i]);}

6、foreach遍历数组

专用于循环遍历数组中的元素:

语法

for (type variable : arrayname) {
  ...
}

以下示例使用foreach循环输出langs数组中的所有元素:

例如:

using System;namespace ArrayApplication{   class MyArray   {      static void Main(string[] args)      {         int []  n = new int[10]; /* n 是一个带有 10 个整数的数组 */         /* 初始化数组 n 中的元素 */                 for ( int i = 0; i < n.Length; i++ )         {            n[i] = i + 100;         }         /* 输出每个数组元素的值 */         foreach (int j in n )         {            int i = j-100;            Console.WriteLine("Element[{0}] = {1}", i, j);         }         Console.ReadKey();      }   }}

for循环和foreach循环,foreach方法更简单方便,而且不需要计数(使用Length属性),并且更具可读性。

7、多维数组

多维数组是包含一个或多个数组的数组。

如果需要创建二维数组,需要将每个数组添加到其各自的大括号内:

例如:

int[][] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };

myNumbers现在是一个以两个数组为元素的数组。

要访问myNumbers数组的元素,请指定两个索引:一个用于数组,一个用于该数组内的元素。本示例访问myNumbers的第二个数组(索引下标为1)中的第三个元素(索引下标为2):

例如:

int [,] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };int x = myNumbers[1][2];Console.WriteLine(x); 

也可以在通过嵌套for循环来获取二维数组的元素(需要指向两个索引下标):

例如:

using System; using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication{    class Program    {        static void Main(string[] args)        {            int [,] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };            for (int i = 0; i < 2; ++i) {              for(int j = 0; j < 4; ++j) {                Console.WriteLine(myNumbers[i,j]);              }              }         }    }}

8、Array 类

Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。

具有以下功能:

  • 给数组赋值:通过 SetValue方法。
  • 对数组排序:通过 Sort 方法,按升序。
  • 查找数组元素:通过 IndexOf 方法能搜索指定的对象,返回整个一维数组中第一次出现的索引。

具体说明请查看下表:

序号

方法 & 描述

1

Clear

根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。

2

Copy(Array, Array, Int32)

从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。

长度由一个 32 位整数指定。

3

CopyTo(Array, Int32)

从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。

索引由一个 32 位整数指定。

4

GetLength

获取一个 32 位整数,该值表示指定维度的数组中的元素总数。

5

GetLongLength

获取一个 64 位整数,该值表示指定维度的数组中的元素总数。

6

GetLowerBound

获取数组中指定维度的下界。

7

GetType

获取当前实例的类型。从对象(Object)继承。

8

GetUpperBound

获取数组中指定维度的上界。

9

GetValue(Int32)

获取一维数组中指定位置的值。索引由一个 32 位整数指定。

10

IndexOf(Array, Object)

搜索指定的对象,返回整个一维数组中第一次出现的索引。

11

Reverse(Array)

逆转整个一维数组中元素的顺序。

12

SetValue(Object, Int32)

给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。

13

Sort(Array)

使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。

14

ToString

返回一个表示当前对象的字符串。从对象(Object)继承。

例如,

using System;namespace ArrayApplication{    class MyArray    {        static void Main(string[] args)        {            int[] list = { 34, 72, 13, 44, 25, 30, 10 };            Console.Write("原始数组: ");            foreach (int i in list)            {                Console.Write(i + " ");            }            Console.WriteLine();            // 逆转数组            Array.Reverse(list);            Console.Write("逆转数组: ");            foreach (int i in list)            {                Console.Write(i + " ");            }            Console.WriteLine();            // 排序数组            Array.Sort(list);            Console.Write("排序数组: ");            foreach (int i in list)            {                Console.Write(i + " ");            }            Console.WriteLine();           Console.ReadKey();        }    }}