C# 数组 Array

数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。

声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。

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

数组声明 和初始化 Array Declaration and Initialization

可以通过使用方括号指定其元素的类型来声明数组

int[] evenNums;  // 整数 数组
string[] cities; // 字符串 数组

以下内容在单个语句中声明并将值添加到数组中。

int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };

string[] names = new string[4] { "Ma", "Le", "ma", ".net" };

上面,names 数组最多可以存储4个字符串。 方括号 new string45] 中的数字 4 指定数组的大小。 另一个numbes 我们没有限定数量,编译器会自己从后面推断出来。

延迟初始化 Late Initialization

不必在单个语句中声明和初始化数组。 您可以先声明一个数组,然后使用 new 运算符对其进行初始化。

int[] evenNums;

evenNums = new int[5];
// or
evenNums = new int[]{ 2, 4, 6, 8, 10 };

访问数组元素 Accessing Array Elements

可以使用索引访问数组元素。 索引是与每个数组元素关联的数字,从索引 0 开始,以数组大小 - 1 结束。

以下示例使用索引添加/更新和检索数组元素。

int[] evenNums = new int[5];
evenNums[0] = 2;
evenNums[1] = 4;
//evenNums[6] = 12;  //运行时抛出异常 System.IndexOutOfRangeException:“Index was outside the bounds of the array.”


Console.WriteLine(evenNums[0]);  // 2
Console.WriteLine(evenNums[1]);  // 4

访问超出数组大小范围的元素,会抛出异常 System.IndexOutOfRangeException

使用 for 循环来访问元素 Accessing Array using for Loop

使用 for 循环访问数组元素。 在 for 循环的条件表达式中使用数组的Length属性。

            int[] evenNums = { 2, 4, 6, 8, 10 };

            for (int i = 0; i < evenNums.Length; i++)
                Console.WriteLine(evenNums[i]);

            for (int i = 0; i < evenNums.Length; i++)
                evenNums[i] = evenNums[i] + 10;  // 让每个元素加上10

使用 foreach来访问元素 Accessing Array using foreach Loop

使用 foreach 循环在不使用索引的情况下读取数组元素的值。

        static void Main(string[] args)
        {
            int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };

            string[] names = new string[4] { "Ma", "Le", "ma", ".net" };

            foreach (var item in numbers)
                Console.Write(item + ",");
            foreach (var item in names)
                Console.Write(item + ",");
        }

输出

109,97,108,101,109,97,46,110,101,116,Ma,Le,ma,.net,

linq 方法

C# 中的所有数组都派生自抽象基类 System.Array。

Array 类实现了 IEnumerable 接口,因此您可以使用 LINQ 扩展方法,例如 Max()、Min()、Sum()、Reverse() 等。请在此处查看所有扩展方法的列表。

        static void Main(string[] args)
        {
            int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };

            var max = numbers.Max(); //116
            var min = numbers.Min(); //46
            var sum = numbers.Sum(); //994
            var average = numbers.Average(); //99.4 double
        }

System.Array 类还包括用于创建、操作、搜索和排序数组的方法。 在此处查看所有 Array 方法的列表。

        static void Main(string[] args)
        {
            int[] nums = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };

            Array.Sort(nums); // 排序
            Array.Reverse(nums); // 倒序
            Array.ForEach(nums, n => Console.WriteLine(n)); // 迭代数组
            Array.Sort(nums); // 排序
            Array.BinarySearch(nums, 109);// 二分查找,使用前需要排序 Sort
        }

将数组作为参数传递 Passing Array as Argument

数组可以作为参数传递给方法参数。 数组是引用类型,因此该方法可以更改数组元素的值。

public static void Main(){
    int[] nums = { 1, 2, 3, 4, 5 };

    UpdateArray(nums); 

    foreach(var item in nums)
        Console.WriteLine(item);   
}
                    
public static void UpdateArray(int[] arr)
{
    for(int i = 0; i < arr.Length; i++)
        arr[i] = arr[i] + 10;   
}

给数组添加一个新的元素

C# 的数组在创建的时候就是固定长度了。 所以如果添加新的元素,需要新创建一个数组长度加1,然后把旧数组的数据拷进来。

在 泛型推出后,跟其它的语言不太一样,我们通常会用 List 来替代 数组。 使用起来会更加方便。

下一篇:C# 多维数组
最近更新的
...