How to assign elements in a vector to an entry in a structure array variable?
9 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Darcy Cordell
el 18 de Mayo de 2023
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 comentarios
Respuesta aceptada
Matt J
el 18 de Mayo de 2023
Editada: Matt J
el 18 de Mayo de 2023
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 comentarios
Más respuestas (2)
Matt J
el 18 de Mayo de 2023
Editada: Matt J
el 18 de Mayo de 2023
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 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!