Подсчет предметов в многомерном массиве - PullRequest
4 голосов
/ 04 марта 2011

Если у меня есть следующий массив:

    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

Ответы [ 3 ]

6 голосов
/ 04 марта 2011

Похоже, вы пытаетесь посчитать количество non-Nothing значений в каждом измерении массива. Следующая функция позволит вам сделать это

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 голосов
/ 04 марта 2011

Примечание: Я использовал конвертер 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 голосов
/ 04 марта 2011

Преобразовано из 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's будет в count(0), счет 1's будет в count(1), и так далее...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...