2016-09-20 3 views
1

Предположим, что у меня есть 3 переменные R1, R2 и R3. Я хотел бы иметь словарь (или другую коллекцию), которые указывают на переменные, поэтому, если я изменяю переменную, это также изменяет значение в словаре.Есть ли способ получить коллекцию, указывающую на переменные в Джулии?

В основном я хочу сделать что-то вроде этого:

R1 = 0.0 
R2 = 0.0 
R3 = 0.0 

D = Dict(1=>R1, 2=>R2, 3=>R3) 

D[1] 
output> 0.0 

R1 = 1.0 

D[1] 
output> 1.0 

Есть ли способ сделать это в Джулию?

Благодаря

+0

Похоже, вам просто нужен стандартный массив Джулии? –

+0

@ DavidP.Sanders Да ... но я хочу попробовать не использовать его по причинам, описанным здесь http://stackoverflow.com/questions/36801197/summation-over-array-slower-than-summing-individual-variables -in-julia Я не хочу, чтобы сделать то, что я хочу сделать, но стоит попробовать – Esteban

+2

'Dict' будет во много раз медленнее, чем массив. –

ответ

7

Вы можете сделать их Ref S:

R1 = Ref(0.0) 
R2 = Ref(0.0) 
R3 = Ref(0.0) 

D = Dict(1=>R1, 2=>R2, 3=>R3) 

D[1][] # output> 0.0 

R1[] = 1.0 

D[1][] # output> 1.0 

Ref ы, как указатели. Синтаксис для назначения в них - ref[] = x, а синтаксис для получения их значения - ref[]. Поэтому просто убедитесь, что вы не забыли [].

4

Вы также можете просто использовать изменяемый объект и мутировать его вместо назначения над ним. например

R1 = [0.]; 
R2 = [0.]; 
R3 = [0.]; 
D = Dict(1=>R1, 2=>R2, 3=>R3); 
D[1] #> 0.0 
R1[1] = 1. # or just R1[] = 1. since empty brackets reference first element 
D[1] #> 1.0