2009-10-25 21 views
2

我遇到了麻煩,我的頭圍繞着一個數組的概念,有兩個以上的維度,爲什麼你需要一個,以及你將如何使用它。爲什麼要使用兩維以上的數組?

例如,如何在多維數組中表示以下數據?

性別:男|女
髮色:金色|布魯內特|黑色
眼睛顏色:藍色|布朗|綠色|榛

本能告訴我,我應該創建一個數組,像這樣:

string[,,] personAttributes = new string[2,3,4]

請出示你如何填補這個數組沒有一個循環,然後用一個循環。任何擴展的概念和使用讚賞。

回答

8

我不會碰你的personAttributes例子,因爲我不認爲一個2D數組是一個好主意,更不用說3D了(我個人會使用一個數組結構)。

但是,當您有某種正交數據空間時(即您有幾個彼此獨立的「選擇」),多維數組非常有用。例如,如果您將10個測試中的20個人的響應時間存儲在其中,每個測試重複3次,並且整個事情每個月都會進行一次,持續12個月,那麼您可能會有這樣一個數組。 :

double[,,,] responseTime = new double [12,20,10,3]; 
+1

注意,C#支持「鋸齒」數組,聲明爲double [] [] [] [] arrayName形式。例如,這可以讓你每月有不同數量的人,每個月每人有不同數量的測試,等等。然而,這樣的數組索引較慢。 – Artelius 2009-10-25 23:51:07

1

建模具有多個維度的數據結構。棋盤就是一個很好的例子,1維是排名,另一個是文件。

由於您示例中的數據類別(性別,眼睛顏色,頭髮顏色)與其他類別沒有任何關係,因此看起來這最好表示爲3個不同的陣列,每個陣列都有1個維度。

如果你想遍歷一個多維數組,您只需使用一個循環內的循環:

for (int i = 0; i < array.length; i++) { 
    for (int j = 0; j < array[0].length; j++) { 
     string data = array[i][j]; 
     // do something with the data 
    } 
} 
+0

* more * than two? – Artelius 2009-10-25 23:19:48

+0

超過2什麼? – 2009-10-25 23:39:53

8

在冠冕堂皇的陳詞濫調的風險,您可以使用三種或更多維數組,當你有三個或更多維度的數據。所以我想你在設想數據的三個維度時遇到了麻煩。

3-D Tic Tac Toe怎麼樣?任何三維數據的離散表示都適合這個類別。

至於像頭髮顏色等屬性,我不會使用這個多維數組。根據需要使用具有該屬性的對象和枚舉(例如,性別作爲枚舉)。這將是比N維陣列更具可讀性。

+0

對,不是陳詞濫調。 – hplbsh 2009-10-25 23:47:38

2

我想說在你的例子中多維數組沒有意義。一個班級在你的情況下更有意義。喜歡的東西作爲成員變量存儲將是一種方式的枚舉,你可以去:

enum HAIRCOLORS { BROWN = 0, BLOND = 1 ..... }; 
enum SEX { FEMALE = 0, MALE = 1 }; 
enum EYECOLORS { GREEN, BLUE, RED .... }; 

class PersonAttributes 
{ 
    public SEX sex = SEX.Female; 
    public HAIRCOLORS hairColor = HAIRCOLORS.Brown; 
    public EYECOLORS eyeColor = EYECOLORS.Green; 
}; 

等等

1

將數組視爲地址可能會有幫助。

123主街斯普林菲爾德MA

使用這個例子中,我的第一陣列。將狀態的陣列。每個州都擁有一系列城市,比城市擁有街道,最後街道擁有個人地址。

有了這個數組,我們可以很容易地創建一個包含每個地址的郵件列表。只需循環遍歷每個數組,您就可以打印出每個地址或任何您需要執行的操作。

看看你的例子,我沒有看到多維數組很適合。除非你想要處理數組的主要事情是查找數據的子集,比如女性/金髮碧眼/藍眼睛的人。我會按照建議使用課程。在查看數組中的人物對象時,您將需要知道指向該人的索引值以找出這些特徵。

另一個可能有用的例子是應用程序中消息的國際化。數組可以是語言,狀態(錯誤,警告,信息),消息ID(數組消息字符串)。

至於填充數組,如果對數據進行排序,則可以使用幾個for循環。否則,請解析您的輸入數據以確定適當的索引。

+0

奇怪的是,我父親過去的工作非常接近您的示例地址。真實的故事。 – 2009-10-26 02:46:40

0

正如其他人寫的,你的例子並不適合3D數組。你的例子似乎更適合2D數據結構。一個指標是人,另一個指標是特徵:性別,頭髮顏色,眼睛顏色。或者你可以使用一些其他的數據結構...

一個簡單的三維陣列的例子:考慮存儲一個(未壓縮的)黑色的數字電影&。每幀是具有強度值的2D圖像X vs Y:圖像(i,j)。現在有多個幀可以有一部電影,您可以將電影存儲爲圖像(i,j,k),其中k隨時間而變化。如果電影是彩色的,你可以添加第四個維度來存儲三種主色:cimages(i,j,q,k),q = 1,2,3,並且有一個4D數組。

相關問題