ITPub博客

首页 > Linux操作系统 > Linux操作系统 > C#数组教程之2

C#数组教程之2

原创 Linux操作系统 作者:大可山 时间:2009-02-24 19:33:02 0 删除 编辑

C#数组教程

(续前《C#数组教程之1》)
第一篇:C#数组教程
第三篇:C#数组教程之3
2、访问数组相关参数

在 C# 中,数组是对象。System.Array 是所有数组类型的抽象基类型。可以使用 System.Array 具有的属性以及其他类成员。这种用法的一个示例是使用“长度”(Length) 属性获取数组的长度。下面的代码将 numbers 数组的长度(为 5)赋给名为 LengthOfNumbers 的变量:

int[] numbers = {1, 2, 3, 4, 5};

int LengthOfNumbers = numbers.Length;

System.Array 类提供许多有用的其他方法/属性,如用于排序、搜索和复制数组的方法。

一维数组:

获取数组长度

int[] arr = new int[3];

int len = arr.Length;

int len2 = arr.GetLength(0) //这种方法也可以获取数组长度,参数表示要获取第几维的数组长度,从 0 开始。

多维数组

以二维数组为例,获取数组长度:

int[,] arr = new int[1, 3];

int len = arr.Length; //取得总的元素个数,这里是 3。

int len2 = arr.GetLength(0) //这种方法可以获取任意维的数组长度,参数表示要获取第几维的数组长度,从 0 开始。

//取得数组元素个数:

int[,] a = new int[3, 4]; 

Console.WriteLine(a.Length);//取得总的元素个数,输出12 

Console.WriteLine(a.GetLength(0));//取得第1维的元素个数,输出3 

Console.WriteLine(a.GetLength(1));//取得第2维的元素个数,输出4

下面介绍一些常用属性和方法

1. Length属性:表示数组所有维数中元素的总数。 

如: 

int[] number={1,2,3,4}; 

number.Length的值为4; 

2. Rank属性:表示数组中的维数。 

如: 

string[,] names = new string[5,4]; 

names.Rank的值为2。 

3. Sort方法:对一维数组排序。它是Array类的静态方法. 

如: 

string [] name=new string[]{"xi","ang","zhang","chun"}; 

Array.Sort(name); 

foreach(string s in name) 

   Console.WriteLine(s); 

4. Reverse方法:反转一维数组 

如 

Array.Reverse(name); 

GetLowerBound与GetUpperBound方法:数组指定维度的下限与上限 

如: 

int [,,] number = new int[4,3,2]{

{{1,2}, {2,3}, {3,4}},

{{4,5}, {5,6}, {6,7}},

{{7,8}, {8,9}, {9,10}},

{{10,11},{11,12},{12,13}}

}; 

for(int i=number.GetLowerBound(0);i<=number.GetUpperBound(0);i++) 

 for(int j=number.GetLowerBound(1);j<=number.GetUpperBound(1);j++) 

 { 

for(int k=number.GetLowerBound(2);k<=number.GetUpperBound(2);k++) 

{

 Console.WriteLine("number[{0},{1},{2}]={3}",i,j,k,number[i,j,k]); 

}

 } 

5. Clear方法 重新初始化数组中所有的元素 将数组中的一系列元素设置为零、false 或空引用。

四、ArrayList

C# 不支持动态数组,用 ArrayList 可以实现动态数组的功能。

ArrayList 的名称空间是 System.Collections。

1、ArrayList 元素类型

和数组不同,ArrayList 的各个元素的类型可以不同。

2、声明对象

//声明 ArrayList 有三种重载方法,较常用的有两种

ArrayList al = new ArrayList();

ArrayList al = new ArrayList(3);

上例中,参数值 3 表示容量,即可以容纳多少个元素。

3、Capacity 与 Count

ArrayList 具有 Capacity 和 Count 属性,分别表示容量和数量。

  Capacity 表示 ArrayList 可包含的元素数;Count 表示实际包含的元素数。 

  Capacity 可读可写;Count 只读。

当 Capacity 不够时

我们的 Capacity 如果小了,无法容纳我们实际的元素个数,这时再增加元素时:

如果指定了 Capacity,Capacity 将按指定的 Capacity 的倍数增长(如果 Capacity 小于 2,将按 2 的倍数增长),比如指定了 Capacity 为 3,那么将按 3、6、9、12、15、18 ……线性的方式增长,直到可以容纳实际的元素个数。

如果没有指定 Capacity 值,Capacity 将按 2、4、8、16、32、64 ……指数的方式增长,直到可以容纳实际的元素个数。

Capacity 不会自动缩小

当 Capacity 被自动增大后,即使删除了某些元素,Capacity 也不会自动缩小,需要设置 Capacity 来缩小,注意 Capacity 不能小于当前 Count。

4、ArrayList的使用(常用的代码):

·获取元素值

object value = al[index]; //al 为 ArrayList 对象,一般需要再对 value 进行类型转换,比如:int n = (int)value;

·设置元素值

al[index] = value; //al 为 ArrayList 对象,index 必须小于 Count

·追加元素

int ArrayList.Add(object value) 返回添加的元素的索引

·插入元素

void ArrayList.Insert(int index, object value)

·删除元素

删除元素后,后面的元素会前移,但 Capacity 不会变化。

void ArrayList.Remove(object obj) 从前(索引 0)往后查找,删除找到的第一个和 obj 相同的元素

void ArrayList.RemoveAt(int index) 删除索引 index 对应的元素

void ArrayList.RemoveRange(int index, int count) 从索引 index 开始,删除 count 个元素

·查找元素

int ArrayList.IndexOf(object value) 从前(索引 0)往后查找,返回找到的第一个和 obj 相同的元素的索引

int ArrayList.IndexOf(object value, int startIndex)

int ArrayList.IndexOf(object value, int startIndex, int count)

int ArrayList.LastIndexOf(object value) 从后往前(索引 0)查找,返回找到的第一个和 obj 相同的元素的索引

int ArrayList.LastIndexOf(object value, int startIndex)

int ArrayList.LastIndexOf(object value, int startIndex, int count)

说明:不保证会对 ArrayList 排序。在执行需要对 ArrayList 排序的操作(如 BinarySearch)之前,必须对 ArrayList 进行排序。

ArrayList 的容量是 ArrayList 可以保存的元素数。ArrayList 的默认初始容量为 0。随着元素添加到 ArrayList 中,容量会根据需要通过重新分配自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。

使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。

ArrayList 接受 空引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素。

使用大小可按需动态增加的数组实现 IList 接口。

II、中高级部分

.net已有对象数组及自定义对象数组

请参见如下代码:

Point pt1 = new Point(1, 1);

Point pt2 = new Point(2, 2);

Point pt3 = new Point(3, 3);

Point[] points = { pt1, pt2, pt3 };

以上创建一个 Point 对象的数组。

(见自定义的Person对象例子)

相关的接口:

1. Array类:

[SerializableAttribute] 

[ComVisibleAttribute(true)] 

public abstract class Array : ICloneable, IList, 违规广告ection, 

IEnumerable

2. ArrayList 类

使用大小可按需动态增加的数组实现 IList 接口。 

[SerializableAttribute] 

[ComVisibleAttribute(true)] 

public class ArrayList : IList, 违规广告ection, IEnumerable, ICloneable

说明:

上面的有两个[XXXAttribute]:

[SerializableAttribute]指示一个类可以序列化。

[ComVisibleAttribute(true)]表示特性,写给编译器看的东东,当为true时,它指示该类对COM是可见的。

关于Attribute的参考资料:

Attribute在.net编程中的应用(一)

http://www.cnblogs.com/dudu/articles/4449.html

Attribute在.net编程中的应用(二)

http://www.cnblogs.com/dudu/articles/4450.html

.NET 技术FAQ(六)-----属性 

http://blog.csdn.net/huanghui22/archive/2004/09/08/98310.aspx

3、相关接口:

 [ComVisibleAttribute(true)] 

public interface ICloneable

{

  //有这样的定义:

  Object Clone();

}

interface IEnumerable

{

IEnumerator GetEnumerator();

}

interface IEnumerator //原义“人口调查员”

{

 object Current&n

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14601556/viewspace-557618/,如需转载,请注明出处,否则将追究法律责任。

上一篇: C#数组教程
下一篇: C#数组教程之3
请登录后发表评论 登录
全部评论
IT人士,爱好编程的码农。

注册时间:2008-06-19

  • 博文量
    118
  • 访问量
    690673