2016-03-19 3 views
0

Я не уверен, что это возможно в Matlab, но мы хотели убедиться.Matlab: структуры с переменным именем как индекс

У меня есть структуры, как:

x = struct(); 
x.val1 = 5; 
x.val2 = 7; 

y = struct(); 
y.val1 = 15; 
y.val2 = 17; 

Я хочу, чтобы создать структуру DataStore как:

DataStore = struct; 
DataStore(x).val1 = 5 
DataStore(x).val2 = 7 
DataStore(y).val1 = 15 
DataStore(y).val2 = 17 

ИЛИ

DataStore = struct; 
DataStore('x').val1 = 5 
DataStore('x').val2 = 7 
DataStore('y').val1 = 15 
DataStore('y').val2 = 17 

Итак, я использую имя оригинала структурные переменные как индекс для DataStore.

Возможно ли это?

Edit:

Я стремлюсь использовать DataStore следующим образом:

disp(DataStore('x').val1) 
disp(DataStore('y').val2) 
+0

Вы ищете [конкатенацию структур в MA TLAB] (http://de.mathworks.com/help/matlab/matlab_prog/concatenate-structures.html)? –

+2

Почему бы просто не сделать Datastore.x.val1 = 5' и т. Д.? – Suever

ответ

4

Используйте структуру, может быть, с динамическими именами полей.

Либо:

DataStore.x.val1=6 
DataStore.x.val2=9 

Альтернативное с динамическим подал имена (результат тот же):

f='x' 
DataStore.(f).val1=6 
DataStore.(f).val2=9 

В случае val1 и val2 не просто заполнители, рассмотривать заменяя их с массивом:

DataStore.(f).val(1)=6 
DataStore.(f).val(2)=9 
+0

Стоит отметить, что поля могут быть доступны с помощью строк. 'disp (DataStore. ('x'). val1)' или 'disp (DataStore (f) .val1)'. Это своего рода подразумевается, но, возможно, стоит быть откровенным с чтением и письмом. Тем не менее, +1 – patrik

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