2x1 structure array to structure array

14 visualizaciones (últimos 30 días)
amateurintraining
amateurintraining el 2 de Oct. de 2017
Comentada: James Tursa el 2 de Oct. de 2017
I have a code:
function [ schedule ] = addGameStruct( schedule,hometeam,awayteam,homescore,awayscore )
%ADDGAMESTRUCT
% schedule is a structure with fields hometeam, awayteam, homescore,
% awayscore, and winner that holds the current data and will be expanded
% to include a new game
% hometeam: home team's final score
% awayscore: away team's final score
field1='hometeam';
field2='awayteam';
field3='homescore';
field4='awayscore';
field5='winner';
value1=hometeam;
value2=awayteam;
value3=homescore;
value4=awayscore;
value5='Cal';
schedule=struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5);
schedule=[schedule;struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5)];
end
That when running the command:
calSchedule=addGameStruct(struct,'UNC','Cal',30,35)
returns the answer:
calSchedule =
2×1 struct array with fields:
hometeam
awayteam
homescore
awayscore
winner
However, I want to produce a structure array like the following:
>> calSchedule = addGameStruct (struct , UNC , Cal , 30 , 35)
calSchedule =
struct with fields :
hometeam : UNC
awayteam : Cal
homescore : 30
awayscore : 35
winner : Cal
Why doesn't my current function produce a single structure array?
  4 comentarios
Cedric
Cedric el 2 de Oct. de 2017
Thank you James!
PS: well, it remains the duty of the OP to care for former questions/answers and it should not be up to us to check their history before answering.
James Tursa
James Tursa el 2 de Oct. de 2017
Frankly, your suggestion to move that schedule input to the last argument and use nargin makes a lot more sense than what is going on in this thread. I wonder why OP didn't implement it ...

Iniciar sesión para comentar.

Respuesta aceptada

James Tursa
James Tursa el 2 de Oct. de 2017
Editada: James Tursa el 2 de Oct. de 2017
You explicitly add that 2nd struct element with this line:
schedule=[schedule;struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5)];
Did you mean for your code to add another element to a passed in schedule? E.g.,
new_schedule = struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5);
schedule = [schedule;new_schedule];
  12 comentarios
James Tursa
James Tursa el 2 de Oct. de 2017
Editada: James Tursa el 2 de Oct. de 2017
@per: That works too. OP needs to decide how robust the function needs to be vs how much restriction to put on that 1st input. I prefer the former, but OP may prefer otherwise ...
per isakson
per isakson el 2 de Oct. de 2017
@James: Agree! Here is a way to prescribe the field names.
>> sas = struct( 'f1',{}, 'f2',{} )
sas =
0x0 struct array with fields:
f1
f2
>> s.f1=1;
>> s.f2=2;
>> sas = [ sas, s ]
sas =
f1: 1
f2: 2
and trying to add a structure with different fields
>> sas = struct( 'f1',{}, 'f2',{} );
>> s.f1=1;
>> s.f3=3;
>> sas = [ sas, s ]
Error using horzcat
Number of fields in structure arrays being concatenated do not match. Concatenation of
structure arrays requires that these arrays have the same set of fields.
>>

Iniciar sesión para comentar.

Más respuestas (0)

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!

Translated by