我有一个返回一个或多个变量的函数,但随着它的变化(取决于函数是否成功),以下内容不起作用:
[resultA, resultB, resultC, resultD, resultE, resultF] = func(somevars);
这有时会返回错误, varargout {2}未定义,因为当函数失败时,实际上只有第一个变量resultA
被赋予一个值。相反,我将所有输出放在一个变量中:
output = func(somevars);
但是,变量被定义为结构的属性,这意味着我必须使用output.A
访问它们。这本身不是问题,但我需要计算属性的数量,以确定我是否得到了正确的结果。
我尝试length(output)
,numel(output)
和size(output)
无济于事,所以如果有人聪明地这样做,我将非常感激。
答案 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));
或STRUCT2CELL和CELLFUN的组合:
nFields = sum(~cellfun('isempty',struct2cell(s)));
上述两个都回答2,而:
nFields = numel(fieldnames(s));
返回3.