Array 一組資料的有序集合

2021-09-21 09:38:11 字數 2411 閱讀 1182

陣列是一種資料結構,它包含若干相同型別的變數。陣列的定義是:在記憶體中連續開闢的空間,該空間中儲存著一組相同資料型別的值。

陣列具有以下屬性:

陣列可以是一維、多維或交錯的。

數值陣列元素的預設值設定為零,而引用元素的預設值設定為 null。

交錯陣列是陣列的陣列,因此,它的元素是引用型別,初始化為 null。

陣列的索引從零開始:具有 n 個元素的陣列的索引是從 0 到 n-1。

陣列元素可以是任何型別,包括陣列型別。

陣列的宣告是使用「」對資料型別修飾,並在宣告的同時,告訴編譯器,我們需要在記憶體中開闢的空間可以儲存多少個值。陣列中的值,我們稱為陣列的元素。

int iarr=new int[6];

上述就是乙個整型陣列的宣告。int告訴編譯器,我們宣告乙個整數陣列,該陣列中只能儲存整型值。iarr是變數名稱。new int[6]就是告訴編譯器,我們需要在記憶體中開闢的空間能儲存6個整型值。

陣列的大小一旦被定義後,就不可以再被更改。同時編譯器為陣列中的每乙個元素依次配給乙個標記,該標記叫下標。你可以想象下酒店的情況,在一層樓上有20個房間,每個房間都有乙個門牌號,房間一旦完成隔離就不可以再更改了,除非這層樓全面重新設計布局。

陣列的下標是從0開始分配的,這個和我們平常的生活有所不同,我們的門牌號大多都是1開始計數,初學者必須要習慣c#喜歡從0開始計數的怪異脾氣。所以下標的最大值總要比陣列中元素的總數小1。

對陣列中具體的元素的訪問,我們必須通過下標實現:

static void main(string args)

執行的結果如圖3.1.1。

圖3.1.1 顯示陣列中指定的元素值

我們也可以在宣告的時候為陣列的每乙個元素賦值,如果使用這種模式,就不必再顯示的描述元素的個數,編譯器能推測出元素的個數。

static void main(string args)

;system.console.writeline(iarr[4]); //輸出下標為4的元素的值

}陣列是連續分配的空間,下標的分配也是連續的,從上述**我們可以發現使用迭代迴圈是訪問陣列的好方法。

static void main(string args)

;for (int i = 0; i <= iarr.length - 1; i++)

}length是陣列的屬性,該屬效能告訴我們當前陣列宣告的元素個數。上述**的輸出結果如圖3.1.2。

圖3.1.2遍歷資料中的每乙個元素

雖然說,陣列的定義是在記憶體中連續分配的空間,但是在 c# 中,陣列實際上是物件,而不只是像 c 和 c++ 中那樣的可定址連續記憶體區域。array 是所有陣列型別的抽象基型別,可以使用 array 具有的屬性以及其他類成員。比如使用array陣列可以非常方便的對陣列型別的值進行排序。

static void main(string args)

}排序後的輸出結果如圖3.1.3。

圖3.1.3 sort結果

c#沒有提供降序的排序方法,不過呢,c#提供了一種方式將陣列中的值反轉它們的順序。

static void main(string args)

}上述**的結果如圖3.1.4。

圖3.1.4 reverse結果

static void main(string args)

}以下就是陣列中元素降序排序的結果,如圖3.1.5所示。

圖3.1.5 降序排序結果

如果我們需要了解某乙個值是否在陣列的一系列元素中存在,我們不必遍歷陣列中的每乙個元素,c#的陣列類提供了indexof方法,該方法返回指定的元素值在陣列中第一次出現的下標位置,如果該值不存在,則返回-1。下面的**描述了如何使用indexof方法查詢陣列中元素的值。

static void main(string args)

得到的結果如圖3.1.6。

圖3.1.6 indesof結果

如果我們使用目前的所有知識來模擬indexof的方法,大致的**如下:

static void main(string args)

public static int myindexof(int iarr, int value)

}return -1;

}我們自己編寫的myindexof方法的執行模式的效果和array的indexof方法是一致的。當然我們可以編寫lastindexof方法,**的實現如下:

public static int mylastindexof(int iarr, int value)

}return index; ;

}如果可以的話,你還可以編寫的函式看看自己是否能靈活運用。

public static int myindexof(int iarr, int value, int start, int end)

}return -1;

}初學者注意

使用自己的程式設計知識,模擬.net framework提供的方法,是一種很有效的學習方法。

對一組資料進行排序

如果有這種可能的話,三路快排是最好的選擇。是否大部分資料距離它的正確的位置很近?是否近乎有序?如果這樣,插入排序是很好的選擇。是否資料取值的範圍非常有限?比如對學生的成績排序。如果這樣,計數排序是很好的選擇 對排序有什麼額外的要求?是否需要穩定的排序?如果是的話,歸併排序是更好的選擇,快排就不行了。...

語言的基礎是一組記號和一組規則

是用於編寫電腦程式的語言。語言的基礎是一組記號和一組規則。根據規則由記號構成的記號串的總體就是語言。在程式語言中,這些記號串就是程式。程式語言包含三個方面,即語法 語義和語用。語法表示程式的結構或形式,亦即表示構成程式的各個記號之間的組合規則,但不涉及這些記號的特定含義,也不涉及使用者。語義表示程式...

一組有用的 Oracle SQL Script

get oracle currnet user table view schema select m.table type ttype,t.table name tname,m.comments tdesc t.column name cname,c.comments cdesc,t.data ty...