Как подсчитать количество свойств в структуре в MATLAB? - PullRequest
3 голосов
/ 19 мая 2009

У меня есть функция, которая возвращает одну или несколько переменных, но при ее изменении (в зависимости от того, успешна ли функция или нет), следующее НЕ работает:

[resultA, resultB, resultC, resultD, resultE, resultF] = func(somevars);

Это иногда возвращает ошибку, varargout {2} не определен , поскольку только первая переменная resultA фактически получает значение в случае сбоя функции. Вместо этого я помещаю весь вывод в одну переменную:

output = func(somevars);

Однако переменные определены как свойства структуры, то есть я должен получить к ним доступ с помощью output.A. Само по себе это не проблема, но мне нужно посчитать количество свойств, чтобы определить, получил ли я правильный результат.

Я пытался length(output), numel(output) и size(output) безрезультатно, поэтому, если у кого-то есть умный способ сделать это, я был бы очень признателен.

Ответы [ 2 ]

12 голосов
/ 19 мая 2009
length(fieldnames(output))

Возможно, есть лучший способ, но я не могу об этом думать.

3 голосов
/ 19 мая 2009

Похоже, Ответ Мэтью лучше всего подходит для вашей проблемы:

nFields = numel(fieldnames(output));

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

>> s.a = 5;
>> s.b = [1 2 3];
>> s.c = [];
>> fieldnames(s)

ans = 

    'a'
    'b'
    'c'

Если вам интересно узнать количество полей , которые не являются пустыми , вы можете использовать либо STRUCTFUN :

nFields = sum(~structfun(@isempty,s));

или комбинация STRUCT2CELL и CELLFUN :

nFields = sum(~cellfun('isempty',struct2cell(s)));

Оба из перечисленных выше возвращают ответ 2, тогда как:

nFields = numel(fieldnames(s));

возвращает 3.

...