create structure variable within loop using strings??

조회 수: 14 (최근 30일)
Michael
Michael . 2015년 6월 17일
편집: Stephen23 . 2015년 6월 29일
within a loop I would like to do something along the lines of the following:
for dive = 1:10
for n = 1:3
(['data_split(',num2str(dive),').n',num2str(n),'.var']) = var;
end
end
so that I end up with a structure like:
data_split(1).n1.var for n= 1:3 and dive = 1:10
  댓글 수: 3
Stephen23
Stephen23 2015년 6월 17일
편집: Stephen23 님. 2015년 6월 29일

댓글을 달려면 로그인하십시오.

채택된 답변

Alberto
Alberto 2015년 6월 17일
편집: Alberto 님. 2015년 6월 17일
for dive = 1:10
for n = 1:3
data_split(dive).( ['n',num2str(n)]).('var')=var
end
end

추가 답변 (1개)

Stephen23
Stephen23 2015년 6월 17일
편집: Stephen23 님. 2015년 6월 18일
This is easy with a bit of help from the documentation, but first we have to understand that these are two separate operations that we are trying to do. Lets look at them:
1) Indexing of a Non-Scalar Structure. Just like any array in MATLAB a structure can be non-scalar, and is indexed using logical or subscript indexing:
>> A(3).data = 9;
>> A(2).data = 3;
>> A(1).data = 1
A =
1x3 struct array with fields:
data
>> [A.data]
ans =
1 3 9
You can use all the usual indexing methods here, plus some very handy shortcuts: check out the link I gave above.
2) Using Dynamic Fieldnames to define or access structure fields. These are also written using parentheses:
>> B.('data') = 2;
>> B.('another_field') = 4
B =
data: 2
another_field: 4
Combining These...
So we can easily combine these two operations like this:
for dive = 1:10
for n = 1:3
tmp = sprintf('n%d',n);
data_split(dive).(tmp).var = XXX;
end
end
Note that using sprintf is usually a more robust way to construct strings, compared to string concatenation. It also makes the intent clearer, as the sequence is clearly defined in the format string.
PS: using eval to generate variable names or perform basic operations in MATLAB really should avoided. Although beginners seem to love variables magically appearing an disappearing from workspace it is not a robust way to program and only makes their own lives more difficult. Read this to know more:

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by