MATLAB: длина поля структуры, которая является списком структур - PullRequest
0 голосов
/ 26 октября 2011

Я нашел этот сайт весьма полезным для решения многих проблем, с которыми я столкнулся, и это мой первый вопрос, который я разместил здесь.Я не нашел ответа на него путем поиска, поэтому я прошу прощения, если он существует где-то еще.

У меня есть массив структур (MxN), созданный как

first = struct('field1',0);
array = repmat(first,[MxN]); %now we have an array of structures

'field1' Я инициализировал 0, потому что это поле для каждой структуры в array(i,j) имеет переменную длину ... то есть я заранее не знаю его длины.Когда моя программа закончена, array(1,1).field1 - это поле структур, то же самое с array(1,2), но список может иметь или не иметь одинаковую длину.

Есть ли способ, которым я могу вернуть длинусписок структур в 'field1'?

1 Ответ

0 голосов
/ 26 октября 2011

Если я правильно понимаю, для каждой структуры массива, field1 будет содержать вектор, и вы хотите получить длину каждого из этих векторов. Например

array = repmat(struct('field1',0), [2 3]);
for i=1:size(array,1)
    for j=1:size(array,2)
        array(i,j).field1 = rand(randi([1 10]),1);
    end
end

Если это так, вот два способа получить длину:

>> len = cellfun(@length, {array.field1})
len =
     3     8     9     4     1     7

>> len = arrayfun(@(s) length(s.field1), array)
len =
     3     9     1
     8     4     7

EDIT:

Оказывается, field1 содержит другую вложенную структуру, и вы хотите получить количество полей в этой вложенной структуре для каждого элемента массива. Пример

array = repmat(struct('field1',0),[1 2]);

array(1,1).field1.a = 1;
array(1,1).field1.b = 1;

array(1,2).field1.c = 2;

len = arrayfun(@(s) length(fieldnames(s.field1)), array)
...