第 19 講:數(shù)組(一):一維、二維和高維數(shù)組
我們將進入一個新的板塊:數(shù)組(Array)。數(shù)組是將一系列數(shù)據(jù)歸并放在一起處理的一種特殊的數(shù)據(jù)類型。在 C# 里,一共有三種數(shù)組:多維數(shù)組(Multi-dimensional Array)、鋸齒數(shù)組(也叫交錯數(shù)組,Jigsaw Array)和混合數(shù)組(Mixed Array)。下面我們挨個介紹一下。
和 C 語言的數(shù)組的概念一樣,但用法不同,所以我們給大家介紹具體寫法格式的時候,希望你能多練習(xí)、多理解。
Part 1 一維數(shù)組
在 C 語言里,我們使用中括號,追加到變量之后,來表達和區(qū)分它和普通的變量不同。在 C# 里,我們這么書寫:
C# 里擁有上述三種書寫格式。第一種,我們使用 new
語句,在后面書寫 int[3]
來表達數(shù)組長度是 3;第二種,我們使用 new
語句,在后面初始化數(shù)組的每一個元素;第三種是第二種的簡寫。在初始化的時候,可以不寫 new int[]
當然,第二種寫法里
new int[]
也可以寫出來長度(后面有 6 個元素,因此可以寫成new int[6]
。但是這個 6 是跟著后面元素個數(shù)的,因此這個 6 可以省略)。另請注意,C# 把
int
類型的數(shù)組變量記作int[]
,即寫在類型的右側(cè)緊跟一個中括號。
使用數(shù)組,我們可以采用中括號來獲取數(shù)組指定位置上的數(shù)值。
這樣一來, a
、b
、c
和 d
四個變量分別是 1、2、4 和 8。中括號里的數(shù)值稱為下標(也叫索引,Index)。C# 里規(guī)定,數(shù)組下標從 0 開始,即第一個元素要寫成 [0]
,第二個元素要寫成 [1]
可能你會問我,如果我寫了一個過大或者過小的索引,比如說
arr[-1]
或者arr[100]
,會怎么樣呢?答案當然很簡單:由于這種行為是非預(yù)期的行為,因此結(jié)果當然了產(chǎn)生異常了。實際上,運行期間,你就會看到,這樣的代碼會產(chǎn)生一個所謂的IndexOutOfRangeException
類型的異常,這剛好代表你傳入的索引是無效的:out of range 不就是超出范圍的意思嘛。
另外,我們還可以使用 for
循環(huán),對每一個元素進行取值:
比如這樣,我們使用 for
另外,在 C# 里,我們?nèi)绻〕鰯?shù)組總長度,我們使用的是 .Length
語法。我們直接在數(shù)組本身后追加 .Length
來取出數(shù)組一共多少個元素。這一點和 C 語言不同:C 語言的數(shù)組是取長度是用的 sizeof(數(shù)組) / sizeof(元素類型)
。
不過,C# 還允許另外一種循環(huán)類型:foreach
循環(huán)。在循環(huán)的內(nèi)容里,我們沒有講解這個類型的循環(huán),因為這個循環(huán)類型必須使用數(shù)組或別的集合才可以使用。它的格式是 foreach (類型 變量名 in 集合)
。
這種循環(huán)類型專門針對于一個數(shù)組來用的話,我們就不必使用索引來寫那么長了;從 foreach
循環(huán)來看,element
就是數(shù)組里面的每一個元素。直接取出數(shù)值本身,然后 element
就是已經(jīng)是元素本身了。
目前來說,foreach
對數(shù)組可用;但是別的可以用 foreach
Part 2 二維數(shù)組
和一維數(shù)組不一樣的是,二維數(shù)組是兩個維度的數(shù)組類型。你可以當成一個矩陣。
我們使用這樣的語法,來初始化一個二維數(shù)組的每一個元素。當然,new int[3, 4]
是可以不寫的;就算要寫的話,這里的 3 和 4 也可以不寫:new int[,]
。注意這種語法格式。類型寫的是 int[,]
,這表示 int
作為元素本體的數(shù)組類型,數(shù)組是二維數(shù)組,因為中括號里用了一個逗號。一個逗號表示將數(shù)組分成兩個維度。
注意語法格式。arr[0, 0]
表示取第 1 行第 1 列的元素,arr[1, 0]
表示取第 2 行第 1 列的元素。和前文一樣,0 表示第一個。
另外,通過 for
最后,使用 .Length
得到的結(jié)果,可能和你預(yù)期結(jié)果不一樣。.Length
取出來的結(jié)果是數(shù)組總的元素個數(shù);二維數(shù)組雖然有維度的概念,但 .Length
照樣取的是所有維度所有元素個數(shù)的總和。
Part 3 高維數(shù)組
高維數(shù)組專門指代三維及其以上的數(shù)組類型。我們拿三維數(shù)組舉例:
三維數(shù)組雖然排版不是很好理解,不過你可以認為這是一個有長、有寬、有高的三維矩陣。另外,new int[2, 3, 4]
也可以不寫;也可以寫成 new int[,,]
。兩個逗號將中括號分成三部分,暗示是三個維度。
遍歷和前文一致,使用 .GetLength
來獲取每一個維度的長度,foreach
循環(huán)獲取每一個元素。
三維數(shù)組以及別的高維數(shù)組是一樣的,.Length