2016-07-10 6 views
0

Итак, я хочу создать динамические переменные как Integer, используя имена из массива. Это то, что я пытался до сих пор:Создание динамических переменных из массива

Dim subjects as Array {"Math", "English", "German"} 'Three example names 
Dim subjectsInt as New Dictionary(Of Integer) 'Throws error: Not enough arguments 
Dim i as Integer 

For i = 0 to 2 
    subjectsInt(subjects(i)) = 0 ' Trying to create a variable with the name of entry number i of the Array & and the starting value 0 

    Do 
     Console.WriteLine(subjects(1) & ": ") 
     Dim input As String = Console.ReadLine() 
     subjectsInt = CInt(input) 
    Loop While subjectsInt = 0 Or subjectsInt > 100 
Next i 

в конце концов, я хочу результат, как этот:

Math = 10  'random values between 1 and 100 
English = 40 
German = 90 

Я надеюсь, что мой вопрос достаточно ясно, спасибо заранее :)

ответ

1

Вы совершенно правы, что аргументов недостаточно. Словарь, а именно Dictionary(Of TKey, TValue), принимает аргумент для типа ключа и типа значения, которое он будет использовать.

Как вы хотите, чтобы использовать ваши строки для поиска вы должны сделать первый тип String:

Dim subjectsInt As New Dictionary(Of String, Integer) 

Это позволит вам возможность получить доступ к значениям, выполнив:

subjectsInt(<your string here>) 

'Example: 
subjectsInt("Math") 
subjectsInt(subjects(0)) 'The first string (which is "Math") from the 'subjects' array. 

Хотя вы должны быть уверены, чтобы добавить ключ первый, но вы можете добавить только один раз:

subjectsInt.Add("Math", <your initial value here>) 

'You may use strings any way you can access them, for example: 
subjectsInt.Add(subjects(0), <your initial value here>) 
subjectsInt.Add(subjects(i), <your initial value here>) 
'etc... 

Тогда вы просто должны быть в состоянии получить/установить его, как вы хотели:

subjectsInt(subjects(i)) = CInt(input) 
+0

Спасибо, это просто отлично :) –

+0

@BennoGrimm: Рад, слышать! Если вы намерены добавлять/устанавливать значения в разное время, вы можете использовать [** 'Dictionary.ContainsKey()' **] (https://msdn.microsoft.com/en-us/library/kw5aaea4 (v = vs .110) .aspx), чтобы проверить, существует ли ключ или нет, поэтому вы будете знать, что вам нужно добавить новую запись или просто изменить уже существующую. –

0

Вы могли бы попробовать что-то вроде этого:

Sub Main() 

    Dim dic As New Dictionary(Of String, Integer) From {{"Math", 10}, {"English", 40}, {"German", 90}} 

    For Each entry In dic.Keys 
     Console.WriteLine(String.Format("{0}: {1}", entry, dic(entry))) 
    Next 

    Console.ReadKey() 

End Sub 
+0

Спасибо за вашу помощь, но это не то, что я искал :) –

Смежные вопросы