【问题标题】:How can I count the number of properties in a structure in MATLAB?如何在 MATLAB 中计算结构中的属性数量?
【发布时间】:2009-05-19 04:11:43
【问题描述】:

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

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

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

output = func(somevars);

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

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

【问题讨论】:

    标签: matlab matlab-struct


    【解决方案1】:
    length(fieldnames(output))
    

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

    【讨论】:

    • 不,这可能是最好的。
    【解决方案2】:

    看起来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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2013-03-22
      相关资源
      最近更新 更多