为什么要使用超过两个维度的数组?

时间:2009-10-25 23:16:29

标签: c# arrays multidimensional-array

我无法绕过具有两个以上维度的数组概念,为什么需要一个,以及如何使用它。

例如,您将如何在multidimesional数组中表示以下数据?

性别:男性|女
头发颜色:金发|布鲁内特|黑
眼睛颜色:蓝色|布朗|绿色|黑兹尔

Instinct告诉我,我应该创建一个数组:

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

请说明如何在没有循环的情况下填充此数组,然后使用循环。对概念和用法的任何扩展表示赞赏。

7 个答案:

答案 0 :(得分:8)

当您有三个或更多维度的数据时,冒着听起来陈腐的风险,使用三维或更多维的数组。所以我猜你在设想三维数据方面遇到了麻烦。

3-D Tic Tac Toe怎么样?任何三维数据的离散表示都属于这一类。

对于头发颜色等属性,我不会为此使用多维数组。根据需要使用具有该属性的对象和枚举(例如,性别作为枚举)。与N维数组相比,这将 更具可读性。

答案 1 :(得分:8)

我不会触及你的personAttributes示例,因为我不认为2D数组是一个好主意,更不用说3D(我个人会使用结构数组)。

但是,当你有某种正交数据空间时,多维数组非常有用(即你有几个“选择”彼此独立)。

例如,如果您在10次测试中存储20个人的响应时间,其中每个测试重复3次,并且整个过程每月进行一次,持续12个月,您可能会有这样的数组:

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

答案 2 :(得分: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;
};

等...

答案 3 :(得分: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
   }
}

答案 4 :(得分:1)

将数组视为地址可能会有所帮助。

123 Main St Springfield MA

使用这个例子,我的第一个数组将是一个状态数组。每个州都会拥有一系列城市,而城市则拥有街道,最后街道上还有个人地址。

使用这个数组,我们可以轻松地创建一个包含每个地址的邮件列表。只需遍历每个数组,您就可以打印出每个地址或任何您需要做的事情。

看看你的例子,我没有看到多维数组是一个很好的选择。除非您想要对阵列做的主要事情是查找数据的子集,例如女性/金发/蓝眼睛的人。我会按照这个建议来使用课程。当您查看数组中的person对象时,您将需要知道指向该人的索引值以找出这些特征。

另一个可能有用的示例是应用程序中消息的国际化。数组可以是语言,状态(错误,警告,信息),消息ID(数组消息字符串)。

至于填充数组,如果对数据进行排序,可以使用几个for循环。否则解析输入数据以识别适当的索引。

答案 5 :(得分:0)

正如其他人写的那样,你的例子并不适合3D数组。您的示例似乎更适合2D数据结构。一个指标是人,另一个指标是特征:性别,头发颜色,眼睛颜色。或者您可以使用其他一些数据结构...

3D阵列的一个简单示例:考虑存储(未压缩的)黑色&amp;白色数字电影。每个帧是2D图像X对Y,具有强度值:图像(i,j)。现在要有多个帧来制作电影,你可以将电影存储为图像(i,j,k),其中k随时间变化。如果电影是彩色的,你可以添加第四个维度来存储三种主要颜色:cimages(i,j,q,k),q = 1,2,3,并有一个4D数组。

答案 6 :(得分:0)

理解3维多维数组的最简单方法是将每个数组确认为一维数组。即 3维数组是一维数组,一维中的每个元素都是2维数组。

令人困惑........?

查看此示例

Here marks of a student named ABC in 2 exams conduct in the same year is displayed in a 2 dimensional array subject wise.

现在只有一个学生时,创建二维数组很容易,但是如果必须存储3个学生的标记ABC,DEF,GHI,则不能在二维数组中做到这一点。 为此,我将创建一个一维数组,可以在其中存储每个学生的数据。

简化.....

我将携带每个学生数据的2D数组存储在一维数组中,现在1D是3维数组

Here Class Array is the 3 dimensional Array

类似地,4维数组也是1维数组,其中该数组的每个元素都是3维数组。

如果增加属性的数量,数组的维数也会增加,因此可以说多维数组用于以有组织的方式存储无关/正交的数据。