3

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

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

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

output = func(somevars);

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

我试过了length(output)numel(output)size(output)无济于事,所以如果有人有聪明的方法,我将非常感激。

4

2 回答 2

12
length(fieldnames(output))

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

于 2009-05-19T04:21:05.900 回答
3

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

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。

于 2009-05-19T14:25:39.360 回答