двумерный массив в массив в Visual Basic - PullRequest
0 голосов
/ 02 мая 2018

У меня вопрос об использовании двумерного массива.

Public twolist(,) As String
For i As Integer = 0 To twolist.length()-1
 If Func(twolist(i, )) Then 'this part is hard for me
     'doing something
 End If

Public Function Func(ByVal CancelInput() As String) As Boolean

Что я хочу сделать, это передать двумерный массив в массив. Я хочу прочитать одну строку в двумерном массиве и перейти к функции (Func), которая использует массив.

Надеюсь, вы понимаете мой вопрос ... и спасибо!

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

В качестве альтернативы циклу For Next вы можете использовать Linq (если вам это удобно) для выполнения той же задачи.

Это преобразует каждый элемент исходного массива в строку, группирует их в IEnumerable(Of String), а результат преобразуется в одномерный массив строк:

Dim twolist(N, N) As String

Dim CancelInput() As String = twolist.Cast(Of String).Select(Function(str) str).ToArray()

Dim result As Boolean = Func(CancelInput)
0 голосов
/ 02 мая 2018

Мэри ответит хорошо, но предполагает, что вы знаете длину каждого измерения.

Я немного изменил его, чтобы использовать функцию Array.GetLength:

Private Sub TwoDimensionalArray()
    Dim twolist(,) As String
    ReDim twolist(10, 5)

    'First you will need to add data to your array
    For x As Integer = 0 To 10

        'Fetch the length of this dimension:
        Dim i As Integer = twolist.GetLength(x)

        Dim arrayRow(i) As String
        For y As Integer = 0 To i - 1
            arrayRow(y) = twolist(x, y)
        Next

        If Func(arrayRow) Then
            'do something
        End If
    Next
End Sub
Public Function Func(ByVal CancelInput() As String) As Boolean
    Return True
End Function

Примечание: В VB.Net ReDim twoList (10,5) фактически дает вам массив (11,6). Array.GetLength (0) вернет 6 (0,1,2,3,4,5). Короче говоря, Dim указывает максимальный индекс в каждом измерении, Length & GetLength возвращает количество элементов.

0 голосов
/ 02 мая 2018

Я только что использовал произвольный размер для вашего массива. Вам нужны вложенные циклы For для итерации по двумерному массиву. Внешний цикл проходит по строкам, а внутренний цикл добавляет значение в каждом поле в другой массив, который вы передаете своей функции. Каждая строка передается индивидуально как один массив измерений.

Private Sub TwoDimensionalArray()
    Dim twolist(,) As String
    ReDim twolist(10, 5)
    'First you will need to add data to your array
    For x As Integer = 0 To 10
        Dim arrayRow(5) As String
        For y As Integer = 0 To 5
            arrayRow(y) = twolist(x, y)
        Next
        If Func(arrayRow) Then 'this part is hard for me
            'doing something
        End If
    Next
End Sub
Public Function Func(ByVal CancelInput() As String) As Boolean
    Return True
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...