C# 数组

数组是一种数据结构,它包含若干相同类型的变量。数组是使用类型声明的:type[] arrayName;

下面的示例创建一维、多维和交错数组:

数组概述

数组具有以下属性:

  • 数组可以是一维多维交错的。

  • 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。

  • 交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。交错数组元素的维度和大小可以不同。

  • 数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。

  • 数组元素可以是任何类型,包括数组类型。

  • 数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerable 和 IEnumerable,因此可以对 C# 中的所有数组使用 foreach 迭代。

在 C# 中,数组实际上是对象,而不只是像 C 和 C++ 中那样的可寻址连续内存区域。

System.Array 类提供了许多其他有用的方法和属性,用于排序、搜索和复制数组。(mscorlib.system.array对象查看)

方法名 描述 重载
Array.Length 获取数组的长度  
Array.Rank 显示数组的维数  
Array.GetUpperBound(int dimension)
获取 System.Array 的指定维度的上限。参数 dimension: Array 的从零开始的维度  
GetLowerBound(int dimension) 下限  
object GetValue(int index1, int index2) 返回索引值 多重
SetValue(object value, int index)
   
IndexOf<T>(T[] array, T value) 搜索指定的T类型的对象,并返回整个 Array 中第一个匹配项的索引。<T>必需重载Object的 Equals 比较方法 多重
LastIndexOf<T>(T[] array, T value)

搜索指定的T类型的对象,并返回整个 Array 中最后一个匹配项的索引。 多重
Sort<T>(T[] array)
使用Array的每个元素的System.IComparable<T>泛型接口实现,对整个Array中的元素进行排序。<T>必需实现IComparable接口

多重
ForEach<T>(T[] array, System.Action<T> action)
  多重
更多在对象查看器:mscorlib.system.arra中    

对数组使用 foreach(支持多维)

 

int[] numbers = { 456123-2-10 };
foreach (int i in numbers)
{
    System.Console.WriteLine(i);
}

 

数组作为参数传递

调用数组参数的方法定义

void PrintArray(int[] arr)
{
    //code
}

传递
可以将初始化的一维数组传递给方法。例如:
PrintArray(theArray);

也可以在一个步骤中初始化并传递新数组。例如:
void PrintArray(new int[] { 1, 3, 5, 7, 9 })

使用 ref 和 out 传递数组时,ref 要初始化, out 可以不初始化。

 

ArrayList 和 List 数组

两者是较为复杂的数组,引用 System.Collections 命名空间

ArrayList 或 List 对象是较为复杂的数组。ArrayList 类和 List 泛型类提供多数 System.Collections 类都提供的但 Array 类未提供的一些功能。例如:

  • Array 的容量是固定的,而 ArrayList 或 List 的容量可根据需要自动扩充。如果更改了 Capacity 属性的值,则可以自动进行内存重新分配和元素复制。

  • ArrayList 和 List 提供添加、插入或移除某一范围元素的方法。在 Array 中,您只能一次获取或设置一个元素的值。

  • 使用 Synchronized 方法很容易创建 ArrayList 或 List 的同步版本。Array 将实现同步的任务留给了用户。

  • ArrayList 和 List 提供将只读和固定大小包装返回到集合的方法;而 Array 不提供。

另一方面,Array 提供了 ArrayList 和 List 所缺少的某些灵活性。例如:

  • 可以设置 Array 的下限,但 ArrayList 或 List 的下限始终为零

  • Array 可以具有多个维度,而 ArrayList 或 List 始终只是一维的

  • 特定类型(不包括 Object)的 Array 的性能优于 ArrayList,这是因为 ArrayList 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List 的性能与同类型的数组十分相近。

需要数组的大多数情况都可以改为使用 ArrayList 或 List;它们更容易使用,并且一般与相同类型的数组具有相近的性能。

Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中;List 位于 System.Collections.Generic 命名空间中。

 

class TestArraysClass
{
    
static void Main()
    {
        
// Declare a single-dimensional array 
        int[] array1 = new int[5];

        
// Declare and set array element values
        int[] array2 = new int[] { 13579 };

        
// Alternative syntax
        int[] array3 = { 123456 };

        
// Declare a two dimensional array
        int[,] multiDimensionalArray1 = new int[23];

        
// Declare and set array element values
        int[,] multiDimensionalArray2 = { { 123 }, { 456 } };

        
// Declare a jagged array
        int[][] jaggedArray = new int[6][];

        
// Set the values of the first array in the jagged array structure
        jaggedArray[0= new int[4] { 1234 };
    }
}

 

posted @ 2009-08-11 14:02  幽灵湖  阅读(2736)  评论(0编辑  收藏  举报