How to assign elements in a vector to an entry in a structure array variable?
조회 수: 5 (최근 30일)
이전 댓글 표시
I have an Nx1 structure array which contains a variable:
N = 100;
S(1).Name = 'Jon';
S(2).Name = 'Phil';
S(3).Name = 'Bob';
%etc...
S(N).Name = 'Gary';
I now have an Mx1 vector of values with associated indices which I want to add to a new variable within the structure:
vec = [36 39 21 74];
indices = [6 2 100 17];
S(1).('Age') = []; %initialize new variable in the structure
S(indices).Age = vec; %This is the intuition for what I want to do
However, this gives an error "Assigning to M elements using a simple assignment statement is not supported".
What I want to end up with is:
S(6).Age = 36;
S(2).Age = 39;
S(100).Age = 21;
S(17).Age = 74;
Of course, I could do this with a loop:
for i = 1:length(vec)
S(indices(i)).Age = vec(i);
end
But I want to avoid loops because my code is already within another large loop which is slow.
Any help is appreciated.
댓글 수: 0
채택된 답변
Matt J
2023년 5월 18일
편집: Matt J
2023년 5월 18일
But I want to avoid loops because my code is already within another large loop which is slow.
When dealing with structs, there is no way to improve upon the speed of a loop. However, you can abbreviate the syntax as follows,
vals=num2cell(vec);
[S(indices).Age] = deal(vals{:});
댓글 수: 0
추가 답변 (2개)
Matt J
2023년 5월 18일
편집: Matt J
2023년 5월 18일
You could also consider using a table instead,
Names=["Jon","Phil","Bob","Gary"]';
T=table(Names,nan(size(Names)), 'Var',["Name", "Age"])
vec = [36 74]';
indices = [1,4]';
T{indices,"Age"}=vec
This can then be converted to a struct array, if desired,
S=table2struct(T)
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Structures에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!