2011-02-25 34 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

相關問題