[英]Why use an Array of more than two dimensions?
我無法理解具有兩個以上維度的數組的概念,為什么需要一個數組,以及如何使用它。
例如,您將如何在多維數組中表示以下數據?
性別:男 | 女性
頭發顏色: 金色 | 黑發 | 黑色的
眼睛顏色:藍色 | 棕色 | 綠色 | 榛
本能告訴我,我應該像這樣創建一個數組:
string[,,] personAttributes = new string[2,3,4]
請說明您將如何在沒有循環的情況下填充此數組,然后再使用循環。 對概念和用法的任何擴展表示贊賞。
冒着聽起來陳詞濫調的風險,當您擁有三個或更多維度的數據時,您可以使用三個或更多維度的數組。 所以我猜你在設想數據的三個維度時遇到了麻煩。
3-D 井字游戲怎么樣? 任何三維數據的離散表示都屬於這一類。
至於頭發顏色等屬性,我不會為此使用多維數組。 根據需要使用具有該屬性的對象和枚舉(例如,將性別作為枚舉)。 這會比一個N維陣列更可讀。
我不會觸及您的 personAttributes 示例,因為我認為 2D 數組不是一個好主意,更不用說 3D(我個人會使用結構數組)。
但是,當您擁有某種正交數據空間(即您有多個相互獨立的“選擇”)時,多維數組非常有用。
例如,如果您要存儲 20 人對 10 次測試的響應時間,其中每個測試重復 3 次,並且整個過程每月完成一次,持續 12 個月,您可能有這樣的數組:
double[,,,] responseTime = new double [12,20,10,3];
我會在你的例子中說多維數組沒有意義。 在您的情況下,課程更有意義。 像存儲為成員變量的枚舉之類的東西將是您可以采用的一種方式:
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;
};
等等...
對具有多個維度的數據結構進行建模。 棋盤就是一個很好的例子,一維是等級,另一個是文件。
由於您示例中的數據類別(性別、眼睛顏色、頭發顏色)與其他類別沒有關系,因此這似乎最好表示為 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
}
}
將數組視為地址可能會有所幫助。
馬薩諸塞州斯普林菲爾德主街 123 號
使用這個例子,我的第一個數組將是一個狀態數組。 每個州將擁有一系列城市,而不是城市擁有街道,最后街道擁有單獨的地址。
使用這個數組,我們可以輕松地創建一個包含每個地址的郵件列表。 只需循環遍歷每個數組,您就可以打印出每個地址或您需要做的任何事情。
看看你的例子,我不認為多維數組很合適。 除非您想對數組做的主要事情是找到數據的子集,例如女性/金發/藍眼睛的人。 我會按照建議使用類。 當您查看數組中的 person 對象時,您將需要知道指向該 person 的索引值以找出這些特征。
另一個可能有用的示例是應用程序中消息的國際化。 數組可以是語言、狀態(錯誤、警告、信息)、消息 ID(數組消息字符串)。
至於填充數組,如果數據已排序,則只需使用幾個 for 循環即可。 否則解析您的輸入數據以識別適當的索引。
正如其他人所寫,您的示例不太適合 3D 數組。 您的示例似乎更適合 2D 數據結構。 一個指標是人,另一個指標是特征:性別、頭發顏色、眼睛顏色。 或者你可以使用其他一些數據結構......
3D 數組的一個簡單示例:考慮存儲(未壓縮的)黑白數字電影。 每幀都是一個 2D 圖像 X 與 Y,具有強度值:圖像 (i,j)。 現在有多個幀來播放電影,您可以將電影存儲為圖像 (i, j, k),其中 k 隨時間變化。 如果電影是彩色的,您可以添加第四個維度來存儲三種原色:cimages (i, j, q, k)、q=1,2,3,並有一個 4D 數組。
理解多維數組的最簡單方法是將每個數組都視為一維數組。 即一個 3 維數組是一維數組,一維中的每個元素都是一個二維數組。
混亂……?
看這個例子
在這里,一個名為 ABC 的學生在同一年的 2 次考試中的分數顯示在一個二維數組中。
現在當只有一個學生時,很容易制作一個二維數組,但是如果你必須存儲 3 個名為 ABC、DEF、GHI 的學生的分數,你就不能在二維數組中做到這一點。 為此,我將創建一個一維數組,我可以在其中單獨存儲每個學生的數據。
簡化.....
我將攜帶每個學生數據的二維數組存儲在一維數組中,現在一維是一個 3 維數組
類似地,4 維數組也是 1 維數組,其中該數組的每個元素都是 3 維數組。
如果增加屬性的數量,數組的維數也會增加,因此我們可以說多維數組用於以有組織的方式存儲不相關/正交的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.