在多维数组中计算项目数量

4
如果我有以下数组:
    Dim Array(4, 10) As String
    Array(0, 0) = "100"
    Array(0, 1) = "200"
    Array(1, 0) = "300"
    Array(1, 1) = "400"
    Array(1, 2) = "500"
    Array(1, 3) = "600"

我该如何获取以下计数:

0 = 2
1 = 4

已删除 ASP.NET 标签:这里没有任何关于 ASP.NET 的内容。 - Richard
这个数组是用于asp.net网站的,因此与asp.net有关。 - oshirowanen
2
不,真的,这个问题与ASP.NET无关,这一事实可以证明整个问题在控制台应用程序中完全正常运行。 - AakashM
3个回答

6

看起来你正在尝试计算数组每个维度中非空值的数量。以下函数将帮助你实现这一目标。

Public Function CountNonNothing(ByVal data As String(,), ByVal index As Integer) As Integer
    Dim count = 0
    For j = 0 To data.GetLength(1) - 1
        If data(index, j) IsNot Nothing Then
            count += 1
        End If
    Next
    Return count
End Function

它可以这样调用

Dim count1 = CountNonNothing(Array, 0)
Dim count2 = CountNonNothing(Array, 1)

2

注意: 我使用了C#转VB的工具,因此希望VB语法是正确的。

我编写了一个简单的扩展方法,使得这个过程变得十分容易:

Public NotInheritable Class Extensions
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Shared Function GetNonNullItems(Of T)(array As T(,), index As Integer) As IEnumerable(Of T)
    For i As Integer = 0 To array.GetLength(index) - 1
        If array(index, i) IsNot Nothing Then
            yield Return array(index, i)
        End If
    Next
End Function
End Class

然后使用它:
Dim Array As String(,) = New String(4, 10) {}
Array(0, 0) = "100"
Array(0, 1) = "200"
Array(1, 0) = "300"
Array(1, 1) = "400"
Array(1, 2) = "500"
Array(1, 3) = "600"

Dim countArray0 As Integer = Array.GetNonNullItems(0).Count()
Dim countArray1 As Integer = Array.GetNonNullItems(1).Count()

扩展方法将为您返回给定索引找到的所有非空项目。从中,您可以获取计数、过滤、查询或以任何您想要的方式使用它们。

0

从C#转换,但可能类似于这样。

Dim count As Integer() = New Integer(Array.GetLength(0) - 1) {}
For i As Integer = 0 To Array.GetLength(0) - 1
    For j As Integer = 0 To Array.GetLength(1) - 1
        If Array(i, j) IsNot Nothing Then
            count(i) += 1
        End If
    Next
Next

现在,0 的数量将在 count(0) 中,1 的数量将在 count(1) 中,以此类推...

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