C#陣列教程之2
C#陣列教程
第一篇:C#陣列教程
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#陣列教程之3C#陣列
- C#陣列相乘C#陣列
- C#陣列教程C#陣列
- c# 陣列排序C#陣列排序
- C#陣列引數C#陣列
- c# 陣列學習C#陣列
- 2-7 陣列:動態陣列陣列
- numpy陣列(2)陣列
- 瞭解下C# 陣列(Array)C#陣列
- C#初始化陣列C#陣列
- C# 陣列的複製C#陣列
- C#中複製陣列C#陣列
- C#學習 陣列(22)C#陣列
- [Shell] awk 陣列(2)陣列
- 陣列的操作(2)陣列
- C#陣列與集合的區別C#陣列
- 【C#學習筆記】陣列使用C#筆記陣列
- C#實現控制元件陣列C#控制元件陣列
- c#二維陣列定義宣告C#陣列
- c# 方法引數_陣列引數C#陣列
- C# unsafe 快速複製陣列C#陣列
- 慕課網玩轉資料結構課程之陣列資料結構陣列
- 陣列呼叫c#讀取陣列中獲取最大最小值方法陣列C#
- 請教高手,解析巢狀XMl和建立多位陣列巢狀XML陣列
- C# 移除陣列中重複資料C#陣列
- C#位元組陣列與字串轉換C#陣列字串
- C#實現控制元件陣列 (轉)C#控制元件陣列
- 【C#】山脈陣列的峰頂索引C#陣列索引
- go語言教程之淺談陣列和切片的異同Go陣列
- 資料結構2——陣列資料結構陣列
- C#陣列 多個集合和陣列的操作(合併,去重,拆分,判斷)C#陣列
- c#列舉與陣列初始化及使用小記C#陣列
- 陣列(2)陣列運算及典例(求解素數的方法)陣列
- C#教程之介面用法C#
- C#高效能陣列複製實驗C#陣列
- C#中陣列的三種訪問方式C#陣列
- c#之arraylist動態陣列小記(1)C#陣列
- C# string byte陣列轉換解析C#陣列