1

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

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.

谁能帮我完成这项任务?

先感谢您

4

3 回答 3

0

你想要一个结构向量:

s(1) = struct()
s(1).name = 'Mr. Doe'

...

s(2) = struct()
s(2).name = 'Ms. Jane'
...

然后您可以使用索引访问结构向量:

snew = s(i)

如果你只想要前两个成员,你可以这样做:

snew = s(1:2)
于 2016-12-05T10:01:06.677 回答
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{:});
于 2016-12-05T12:53:22.053 回答
0

您可以将要复制的字段放入元胞数组中,然后循环遍历该数组并通过动态字段名称访问结构字段。

to_keep = {'one', 'two'};

out = struct();

for k = 1:numel(to_keep)
    out.(to_keep{k}) = s.(to_keep{k});
end

正如其他人所指出的,可能有更好的方法来组织数据以简化此操作。

于 2016-12-05T12:55:47.893 回答