У меня есть структурный массив с большим количеством полей, которые меня не интересуют, поэтому я хочу извлечь ограниченное количество полей, которые меня интересуют, и поместить его в отдельный структурный массив.
Для структурного массива размером один я сделал это, создав новый массив с нуля, например:
structOld.a = 1;
structOld.b = 2;
structOld.usefulA = 'useful information';
structOld.usefulB = 'more useful information';
structOld.c = 3;
structOld.d = 'words';
keepFields = {'usefulA','usefulB'};
structNew = struct;
for fn = keepFields
structNew.(fn{:}) = structOld.(fn{:});
end
, что дает
structNew =
usefulA: 'useful information'
usefulB: 'more useful information'
Есть ли более эффективныйспособ сделать это?Как я могу масштабироваться до структурного массива (вектора) размера N?
N = 50;
structOld(1).a = 1;
structOld(1).b = 2;
structOld(1).usefulA = 500;
structOld(1).usefulB = 'us';
structOld(1).c = 3;
structOld(1).d = 'ef';
structOld(2).a = 4;
structOld(2).b = 5;
structOld(2).usefulA = 501;
structOld(2).usefulB = 'ul';
structOld(2).c = 6;
structOld(2).d = 'in';
structOld(3).a = 7;
structOld(3).b = '8';
structOld(3).usefulA = 504;
structOld(3).usefulB = 'fo';
structOld(3).c = 9;
structOld(3).d = 'rm';
structOld(N).a = 10;
structOld(N).b = 11;
structOld(N).usefulA = 506;
structOld(N).usefulB = 'at';
structOld(N).c = 12;
structOld(N).d = 'ion';
В этом случае я бы хотел получить:
structNew =
1x50 struct array with fields:
usefulA
usefulB
Сохранение элементов с помощьюпустые usefulA
/ usefulB
поля в порядке;Я могу избавиться от них позже, если потребуется.
Использование rmfield
невелико, поскольку число бесполезных полей намного превосходит число полезных полей.