VBA - Использовать многомерный массив вместо двух отдельных? - PullRequest
4 голосов
/ 30 марта 2011

Много глупых вопросов в последнее время, но я был бы признателен за некоторые комментарии по этому вопросу.У меня есть строка из INI-файла.Похоже, Firstname=FIRSTNAME.В основном это массив с множеством таких.Я хочу разделить их, но сохранить их обоих.Итак, мне удалось поместить Firstname в его собственный массив и FIRSTNAME в его собственный.Но затем мой коллега сказал: «Почему бы вам не использовать вместо этого многомерный массив?».И это заставило меня задуматься, поставив Firstname в 0 и FIRSTNAME в 1. Но как мне это сделать?

Это мой код прямо сейчас:

    For iTeller = 0 To UBound(arrIniName)
        If Not arrIniName(iTeller) = "" Then
            arrIniName(iTeller) = Split(arrIniName(iTeller), "=")(0)
        End If
    Next

    For iTeller = 0 To UBound(arrIniValue)
        If Not arrIniValue(iTeller) = "" Then
            arrIniValue(iTeller) = Split(arrIniValue(iTeller), "=")(1)
        End If
    Next

Оба arrIniNameи arrIniValues ​​состоит из точно такого же массива для начала.Что выглядит следующим образом:

arrIniName(0) "Fistname=FIRSTNAME"
arrIniName(1) "Lastname=LASTNAME"
arrIniName(2) "Initials=INITIALS"

Так что я в основном разделил каждый из них на их отдельные массивы, как я это делаю сейчас.Но было бы лучше поместить их в многомерный массив?Потому что тогда у меня был бы только один массив для управления, и он мог бы также извлекать этот массив через цикл For Each.

Редактировать: я закончил делать это так, где Values это массив

For Each s In Values
    Dim strName, strValue
    s = Split(s, "=")
    strName = s(0)
    strValue = s(1)

    'Run function strName, strValue
Next

1 Ответ

4 голосов
/ 30 марта 2011

Идеальное решение звучит как Словарь (структура данных, которая содержит пары ключ / значение - именно то, что у вас есть в вашем файле INI).

Многомерный массив здесь не понадобится, поскольку у вас есть только 2 измерения (ключ и значение). С массивами, как правило, сложнее работать, чем со словарями, так как их трудно изменить в размере, поэтому вам нужно знать, сколько элементов у вас есть.

Поэтому я бы предложил следующий код:

Dim dict As Dictionary
Set dict = new Dictionary
Dim key as String
Dim value as String

For iTeller = 0 To UBound(arrIniValue)
    If Not arrIniValue(iTeller) = "" Then
        key = Split(arrIniValue(iTeller), "=")(0)
        value = Split(arrIniValue(iTeller), "=")(1)
        dict.Add(key, value)
    End If
Next

Однако, если вы хотите использовать многомерный массив, тогда это будет делать следующее:

' Declare a 2-dimensional array, of dimensions "n by 2".
Dim results(UBound(arrIniValue), 2) As String

For iTeller = 0 To UBound(arrIniValue)
    If Not arrIniValue(iTeller) = "" Then
        key = Split(arrIniValue(iTeller), "=")(0)
        value = Split(arrIniValue(iTeller), "=")(1)
        results(iTeller, 0) = key
        results(iTeller, 1) = value
    End If
Next
...