如何在matlab中从动态结构访问和存储选定的字段?

时间:2016-12-05 09:56:51

标签: matlab structure matlab-struct

我有一个庞大的动态结构。它看起来像这样:

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';

现在,我想访问并存储前两个字段onetwo(在所有给定字段中)及其相应的数据到新的动态结构snew

我尝试过以下事情:

for ii = 1:2
    snew = [s.(ii)];
end

错误:Argument to dynamic structure reference must evaluate to a valid field name.

任何人都可以帮助我完成这项任务吗?

提前谢谢

3 个答案:

答案 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

正如其他人所说,可能有一种更好的方法来组织数据,使这项操作更简单。