声明二维数组

6

我有几个大学作业遇到了麻烦。实际上,我只是对数组的一件事情感到困惑。我需要声明一个三列、五行的数组。前两列是整数,第三列是字母成绩。所以,我非常困惑如何声明数据类型,因为它们是不同的。这是我第一次使用数组,请原谅我的无知。以下是我的数组应该看起来的样子。

Column 1 {0,300,350,400,450}
Column 2 {299,349,399,449,500}
Column 3 {F,D,C,B,A}

(这是一个分级应用程序)

我可以自己解决问题的其余部分,只是对于这个数组部分感到困惑。因此,我的问题严格来说是如何声明这样的数组。它说要使用二维数组,这让我更加困惑,因为有三列。谢谢!


我认为他们建议使用2D,因为范围是整数/数字,而字母是字符串。我猜在范围内使用2D,另外再用一个字符串数组来表示等级。如果分数落在GradeRange(i)的范围内,则等级为Grades(i)。即使2D也有些过度设计,因为i的高端是i-1的低端。Visual Basic中的数组 - Ňɏssa Pøngjǣrdenlarp
这是使用2D数组的非常糟糕的场景选择,但是大多数用于教授2D数组使用的场景都是如此。 2D数组有其存在的意义,但只有在实际需要矩阵(即每个元素都是对等的)时才应使用它们。 无论如何,您使用2D数组完全与您的问题无关。 如果您必须声明一个变量,可以存储“整数”值或“字符串”,则应声明什么类型? 这就是您用于数组的类型。 - jmcilhinney
谢谢你的发人深省的回复。虽然我不知道你问题的答案,但现在我有了研究的方向。再次感谢! - JohnB
2个回答

15

二维数组是正确的。第一个索引是列,第二个索引是行。

Dim strData(,) As String 'Use String variable type, even for the numbers
Dim intRowCount As Integer = 5
Dim intColumnCount As Integer = 3
ReDim strData(intColumnCount - 1, intRowCount - 1) 'subtract 1 because array indices are 0-based. Column 0 = Range start, Column 1 = Range End, Column 2 = Grade
'first row
strData(0, 0) = "0" 'Range start
strData(1, 0) = "299" 'Range end
strData(2, 0) = "F" 'Grade
'second row
strData(0, 1) = "300"
strData(1, 1) = "349"
strData(2, 1) = "D"
'third row
strData(0, 2) = "350"
strData(1, 2) = "399"
strData(2, 2) = "C"
'fourth row
strData(0, 3) = "400"
strData(1, 3) = "449"
strData(2, 3) = "B"
'fifth row
strData(0, 4) = "450"
strData(1, 4) = "500"
strData(2, 4) = "A"
'Add a row
intRowCount = intRowCount + 1
ReDim Preserve strData(intColumnCount - 1, intRowCount - 1)
'sixth row
strData(0, 5) = "501"
strData(1, 5) = "600"
strData(2, 5) = "A+"
请注意, Redim Preserve 只能更改数组中的最后一个索引,这就是为什么我们按 (列,行) 而不是更传统的 (行,列) 顺序存储的原因。

在VB中处理二维数组的绝佳示例。 - dustinrwh
我通常将第一个索引视为行,第二个索引视为列。还有其他人也这样认为吗?如果你只是编写和阅读数据,那么这并不重要,但如果你正在使用外部代码,我只是好奇是否通常是这样做的。 - dustinrwh
1
好问题!通常情况下,您会添加行,并且“Redim Preserve”仅适用于最后一个索引。这意味着最后一个索引通常是行。 - SSS
那么在VB中这样做完全是正确的。非常好的答案!从快速的谷歌搜索来看,大多数其他语言似乎行是通常是第一个索引,其次是列链接,但这也可能是个人喜好。 - dustinrwh
大多数其他编程语言都没有像VB一样的可调整大小的数组! :-) - SSS

2

有几种方法可以解决这个问题。一种方法是将数组声明为Object类型,然后将整数或字符串分配给相应的元素。但是有些人认为这种做法在社交方面不可接受,因为它可能导致难以调试的代码。

您还可以使用String类型的二维数组,并将整数保存在字符串变量中。由于需要进行数字比较和计算的转换,通常也不会这样做。

另一种方法是使用包含三个值的结构体或类,并创建一个该类型的数组。

例如:

Structure Item
  Dim col1 as integer
  Dim col2 as integer
  Dim col3 as string
  End Structure

Dim itemList(20) as Item

itemList(4).col1 = 23
itemList(4).col2 = 45
itemList(4).col3 = "somestring"

在现实世界中,我建议使用 System.Data.DataTable。 - SSS
使用结构体或类是一个好主意。它通常会让生活变得更加容易。 - dustinrwh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接