2011-02-25 84 views
5

对于相同的输入结构,即使在不同的计算机,不同的操作系统和不同的MATLAB版本中,字段名是否会始终返回相同的单元阵列?或者它可以以不同的方式排列字段名称?例如: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的存在似乎意味着字段名可预测地返回潜在的,通常不变的顺序。

回答

8

我相信结构字段是按照他们创建的顺序排列的。如果将结构保存为mat文件并稍后用另一个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 

UPDATE

下面是从MATLAB文档structure data type报价 “列出结构的字段” 下的字幕:

的字段出现在它们的创建顺序。

希望能回答你的问题。

+1

请注意,分配结构数组的元素时,字段顺序非常重要。 – Jonas 2011-02-25 17:18:42

+0

谢谢。我只是不想依赖未定义的行为。您是否知道文档中的任何地方都指出字段名称会按字母顺序返回字段名称?即它承诺如果我将字段设置为特定顺序,那么我按照该顺序返回它们呢? – AlcubierreDrive 2011-02-25 17:24:51

+0

我用报价更新了答案。 – yuk 2011-02-25 19:57:19