如何计算MATLAB中结构中的属性数?

时间:2009-05-19 04:11:44

标签: matlab matlab-struct

我有一个返回一个或多个变量的函数,但随着它的变化(取决于函数是否成功),以下内容不起作用:

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

这有时会返回错误, varargout {2}未定义,因为当函数失败时,实际上只有第一个变量resultA被赋予一个值。相反,我将所有输出放在一个变量中:

output = func(somevars);

但是,变量被定义为结构的属性,这意味着我必须使用output.A访问它们。这本身不是问题,但我需要计算属性的数量,以确定我是否得到了正确的结果。

我尝试length(output)numel(output)size(output)无济于事,所以如果有人聪明地这样做,我将非常感激。

2 个答案:

答案 0 :(得分:12)

length(fieldnames(output))

可能有更好的方法,但我想不出来。

答案 1 :(得分:3)

看起来Matthews answer最适合您的问题:

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

STRUCT2CELLCELLFUN的组合:

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

上述两个都回答2,而:

nFields = numel(fieldnames(s));

返回3.