2011-02-25 19 views
5

Aynı giriş yapısı için, alan adları her zaman farklı bilgisayarlarda, farklı işletim sistemlerinde ve farklı MATLAB sürümlerinde bile aynı hücre dizisini döndürecekler mi? Veya alan isimlerini farklı bir şekilde sipariş edebilir mi? Örn .:MATLAB: alan adları 'sipariş tanımlandı mı?

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 aynı sırada her defasında döndürülür söz görünmüyor. Ancak diğer yandan, orderfields'un varlığı, alan adlarının tahminen altta yatan, normalde değişmeyen bir sıraya dönüştüğünü ima ediyor gibi görünüyor.

cevap

8

Ben yarattıkları olarak yapı alanları sıralanır inanıyoruz. Yapıyı mat-dosyaya kaydedip daha sonra başka bir MATLAB ile açarsanız, sipariş saklanacaktır. Alanları her zaman ORDERFIELDS işleviyle yeniden sıralayabilirsiniz. Birçok farklı şekilde sipariş edebilirsiniz (alfabetik olarak sırala, hücre dizileri, başka bir yapı veya permütasyon vektörü kullanarak), daha fazla bilgi için belgelere bakın. Bu arada

, yapılar karşılaştırma etkilemez sırasını alanları.

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 

GÜNCELLEME: Burada

"Bir Yapı Alanları Listeleme" altında structure data type için MATLAB belgelerinden alıntı altyazı:

alanları görünür yaratıldıkları sıra.

Umut bu sorunuza cevap verir. yapılar bir dizi elemanlarını atarken

+1

Not bu alan sırası önemlidir. – Jonas

+0

Teşekkürler. Ben sadece tanımlanmamış davranışlara güvenmek istemiyorum. Alan adlarının alan adlarını sırayla döndürmeyi vaat ettiğini belirten belgelerin herhangi bir yerinde biliyor musunuz? Yani Ben onlara geri sırayla almak, belli bir düzene alanları ayarlarsanız nerede o vaat ediyor? – AlcubierreDrive

+0

Cevabı bir teklifle güncelledim. – yuk