簡體   English   中英

為什么要使用二維以上的數組?

[英]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 維數組

這里 Class Array 是 3 維數組

類似地,4 維數組也是 1 維數組,其中該數組的每個元素都是 3 維數組。

如果增加屬性的數量,數組的維數也會增加,因此我們可以說多維數組用於以有組織的方式存儲不相關/正交的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM