我有一个庞大的动态结构。它看起来像这样:
s.one.name = 'Mr. Doe';
s.one.time = '12:00';
s.one.ID = '209';
s.one.data = 'Data1';
s.two.name = 'Ms. Jane';
s.two.time = '13:00';
s.two.ID = '210';
s.two.data = 'Data2';
s.three.name = 'Ms. Alice';
s.three.time = '14:00';
s.three.ID = '212';
s.three.data = 'Data3';
s.four.name = 'Mr. Smith';
s.four.time = '14:00';
s.four.ID = '212';
s.four.data = 'Data4';
现在,我想访问并存储前两个字段one
和two
(在所有给定字段中)及其相应的数据到新的动态结构snew
。
我尝试过以下事情:
for ii = 1:2
snew = [s.(ii)];
end
错误:Argument to dynamic structure reference must evaluate to a valid field name.
任何人都可以帮助我完成这项任务吗?
提前谢谢
答案 0 :(得分:0)
你想要一个结构矢量:
s(1) = struct()
s(1).name = 'Mr. Doe'
...
s(2) = struct()
s(2).name = 'Ms. Jane'
...
然后你可以使用索引来访问结构的向量:
snew = s(i)
如果您只想要前两个成员,您可以这样做:
snew = s(1:2)
答案 1 :(得分:0)
对于两个领域,你可以直接前进:
snew = struct('one', s.one, 'two', s.two);
对于可变数量的字段(比如k),您可以按以下方式执行:
names = fieldnames(s);
vals = struct2cell(s);
list = [names(1:k) vals(1:k)]';
snew = struct(list{:});
答案 2 :(得分:0)
您可以将要复制的字段放在单元格数组中,然后遍历该字段并通过动态字段名称访问struct字段。
to_keep = {'one', 'two'};
out = struct();
for k = 1:numel(to_keep)
out.(to_keep{k}) = s.(to_keep{k});
end
正如其他人所说,可能有一种更好的方法来组织数据,使这项操作更简单。