如何使用VB.NET对2D数组中的元素求和?

时间:2011-03-29 23:46:33

标签: vb.net arrays

您如何对此进行编码,以便将第一列和第二列相加?

Dim intSales(,) As Integer = {{100000, 150000}, _
                              {90000, 120000}, _
                              {75000, 210000}, _
                              {88000, 50000}, _
                              {125000, 220000}, _
                              {63000, 80000}}

For intColumn As Integer = 0 To intSales.GetUpperBound(1)
    For intRow As Integer = 0 To intSales.GetUpperBound(0)
        ' what do I put here?

    Next intRow
Next intColumn

这有意义吗?如有必要,我很乐意澄清。

3 个答案:

答案 0 :(得分:0)

绘制你的价值观并考虑它然后再回来一些示例代码,如果你仍然需要帮助。为了让你开始我会说第一个数组索引将是你的“行”。第二个数组索引将是该行中的“列”。因此,您可以使用类似intSales[1][1]的内容访问120000(第二行,第二列)(请记住,数组索引基于零)。

答案 1 :(得分:0)

    Dim s0 As Integer = 0
    Dim s1 As Integer = 0
    For i As Integer = 0 To intSales.GetLength(0) - 1
        s0 += intSales(i, 0)
        s1 += intSales(i, 1)
    Next

答案 2 :(得分:0)

通过创建两个嵌套的for循环,您已经走在正确的轨道上。您将需要为外部数组的每个循环遍历内部数组。

我认为你缺少的主要事情是你需要在for循环之外创建一个临时变量来保存总和值。例如,我将sumTotal声明为Integer

Dim intSales(,) As Integer = {{100000, 150000}, _
                              {90000, 120000}, _
                              {75000, 210000}, _
                              {88000, 50000}, _
                              {125000, 220000}, _
                              {63000, 80000}}

' Declare a temporary variable to hold the sum as you loop
Dim sumTotal As Integer = 0    

For intColumn As Integer = 0 To intSales.GetUpperBound(1)
    For intRow As Integer = 0 To intSales.GetUpperBound(0)
        ' Add the value at this specific point in the array
        '  to the existing value of the sumTotal variable
        sumTotal += intSales(intRow, intColumn)
    Next intRow
Next intColumn

请注意,我在这里使用了特殊的“加 - 等于”(+=)运算符。您可能还没有了解到这一点,但它等同于以下代码,只是更容易阅读:

sumTotal = sumTotal + intSales(intRow, intColumn)

运行该代码会在sumTotal变量中放置值1,371,000,我认为这是正确的。 ; - )


有人建议您可能希望为数组的每一列获取单独的结果。在这种情况下,您需要声明两个临时变量,每列一个。然后,您将要遍历第一列的行中的每个元素,将如上所示的值总计为第一个临时变量。要获得第二列的结果,您只需循环遍历该列行中的每个元素,就像对第一列一样对值进行求和。

这只是一个主题的变体 - 一旦你理解了如何循环遍历数组,并将值汇总成一个临时变量,你就有足够的信息来轻松解决这个问题。


我要添加的唯一内容是纯粹的风格:VB.NET的编码指南通常建议反对为您的变量名前缀类型标识符。在这种情况下,您使用int表示变量的类型为Integer

但事实是,当您将鼠标悬停在变量上时,Visual Studio已经在工具提示中提供了这些信息,而VB.NET的编译器足够聪明,如果您尝试分配值为1,则会产生错误键入不同的,不兼容的类型的值。将类型信息添加到变量的名称实际上并没有给你任何额外的信息,它只会使名称变得混乱,使事情变得更难阅读。

这是在早期的,不兼容的Visual Basic版本(早在1998年)推荐的做法,但它已被改变以跟上语言的现代演变。如果你愿意的话,你当然可以自由地忽略它,因为这是纯粹的风格建议,不会影响你的程序如何运行,但我只是想在别人离开之前我会提出建议你这是一个讨厌的评论。