C#陣列教程之2

大可山發表於2009-02-24

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章