【问题标题】:MATLAB: is fieldnames' order defined?MATLAB:是否定义了字段名的顺序?
【发布时间】:2011-02-25 16:13:18
【问题描述】:

对于相同的输入结构,字段名称是否总是返回相同的元胞数组,即使在不同的计算机、不同的操作系统和不同的 MATLAB 版本上也是如此?或者它可以对字段名称进行不同的排序吗?例如:

myStructure = load myStructure;
x = fieldnames(myStructure);

% days later, diff computer, diff OS, and diff version of MATLAB...
y = fieldnames(myStructure);
x == y %?

documentation for fieldnames 似乎并不承诺每次都返回相同的订单。但另一方面,orderfields 的存在似乎意味着 fieldnames 可以预见地返回一个潜在的、通常不变的顺序。

【问题讨论】:

    标签: matlab data-structures


    【解决方案1】:

    我相信结构字段在创建时是按顺序排列的。如果您将结构保存到 mat-file 并稍后使用另一个 MATLAB 打开它,则将保留该顺序。您始终可以使用 ORDERFIELDS 函数重新排序字段。您可以通过多种不同的方式进行排序(按字母顺序排序、使用元胞数组、其他结构或排列向量),有关更多详细信息,请参阅文档。

    顺便说一下,字段顺序不会影响结构比较。

    s1 = struct('a',0,'b',1)
    
    s1 = 
    
        a: 0
        b: 1
    
    s2 = struct('b',1,'a',0)
    
    s2 = 
    
        b: 1
        a: 0
    
    isequal(s1,s2)
    
    ans = 
    
         1
    
    s1=orderfields(s1,s2)
    
    s1 = 
    
        b: 1
        a: 0
    

    更新

    这是 MATLAB 文档中“列出结构的字段”副标题下对 structure data type 的引用:

    这些字段按照它们的创建顺序显示。

    希望这能回答你的问题。

    【讨论】:

    • 请注意,在分配结构数组的元素时,字段顺序很重要。
    • 谢谢。我只是不想依赖未定义的行为。您是否知道文档中有任何地方声明 fieldnames 承诺按顺序返回字段名称? IE。它在哪里保证如果我将字段设置为特定顺序,我会按该顺序将它们取回?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2017-07-09
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多