2015-11-20 2 views
0

В настоящее время я храню содержимое массива в переменной, затем устанавливаю эту переменную вверх, используя два% и сохраняя значение. Мой текущий код выглядит следующим образом:Как использовать содержимое массива как имя переменной?

Test := {asdf: "blah"} 
Temp := Test["asdf"] 
%Temp% := "boo" 
; above line is be the same as blah := "boo", but blah came from a variable 
msgbox %blah% ; outputs "boo" 

Я не люблю использовать переменную Temp как это.

следующие компилирует но blah остается пустым:

(Test["asdf"]) := "boo" 
%Test%["asdf"] := "boo" 

Следующая дает мне ошибку компиляции:

%(Test["asdf"])% := "boo" 

У меня есть смутное представление о том, что это должно быть возможно, но я просто не могу найти синтаксис для него. Как я могу напрямую использовать массив вместо того, чтобы помещать его в временную переменную?

+1

Whyyyyyyyyyyyyyyy? – TessellatingHeckler

+0

Причина в том, что программа динамически управляется, и у меня есть управляемые системы для установки переменных. Это не одноразовое дело, с которым я сталкиваюсь. У меня есть список данных GIANT, как этот, и этот список может измениться. Вместо того, чтобы искать в программе обновление списка переменных, я создаю их динамически, а другие файлы управляют выходом. – Nelson

+0

Существуют также некоторые очень интересные способы использования данных в качестве переменной. Если у вас есть список элементов, и вы ищете дубликаты при заполнении массива, вы можете выполнить вызов массива [key], чтобы определить, было ли оно ранее назначено, а не зацикливать ваши существующие данные. Вы только что изменили поиск O (n) на поиск O (1). – Nelson

ответ

1

Только что понял.

Проблема при создании переменных с использованием динамических данных может привести к созданию недопустимых имен переменных. Всевозможные способы прикручивания здесь (пробелы, код UTF-8 и т. Д.).

один безопасный способ заключается в использовании ассоциативных массивов:

Output := Object() 
Test := {asdf: "blah"} 
Output[(Test["asdf"])] := "boo" 
msgbox % Output["blah"] 

Есть less restrictions on keys, чем имена переменных.

+0

Но ... ваш 'Тест' уже является ассоциативным массивом. Вот как вы можете указать его с именем «asdf». (Это лучше, чем динамическое создание глобальных переменных). – TessellatingHeckler

+0

Тест не создается динамически. При фактическом использовании данные Test будут поступать из файла, который в основном содержит данные -> пары имен. Выход будет состоять в том, чтобы объединить данные, чтобы они обрабатывались по петле позже. – Nelson

+0

Если это решило ваш вопрос, пожалуйста, отметьте свой собственный ответ, как принято! – Blauhirn

0
globalWrapper(NameOfTheGlobalVar, LocalVar) { 
    global 
    %NameOfTheGlobalVar% := LocalVar 
} 


Test := {asdf: "blah"} 
globalWrapper(Test["asdf"], "boo") 

msgbox %blah% ; outputs "boo" 
Смежные вопросы