基础_C# 数组

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  =  {  4 5 6 1 2 3 - 2 - 1 0  };
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 [] {  1 3 5 7 9  };

        
//  Alternative syntax
         int [] array3  =  {  1 2 3 4 5 6  };

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

        
//  Declare and set array element values
         int [,] multiDimensionalArray2  =  { {  1 2 3  }, {  4 5 6  } };

        
//  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 ] {  1 2 3 4  };
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值