2011-02-25 16 views
5

Para la misma estructura de entrada, ¿los nombres de campo siempre devuelven la misma matriz de celdas, incluso en diferentes computadoras, diferentes sistemas operativos y diferentes versiones de MATLAB? ¿O podría ordenar los nombres de los campos de manera diferente? Ej .:MATLAB: ¿está definido el orden de los nombres de los campos?

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

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

El documentation for fieldnames no parece prometer que la misma orden se vuelve cada vez. Pero, por otro lado, la existencia de orderfields parece implicar que los nombres de campo devuelven predeciblemente un orden subyacente, normalmente inmutable.

Respuesta

8

Creo que los campos de estructura se ordenan tal como se crearon. Si guarda la estructura en mat-file y la abre más tarde con otro MATLAB, se mantendrá el orden. Siempre puede reordenar campos con la función ORDERFIELDS. Puede ordenar de muchas maneras diferentes (ordenando alfabéticamente, utilizando matrices de celdas, otra estructura o vector de permutación), consulte la documentación para obtener más detalles.

Por cierto, el orden de los campos no afecta la comparación de estructuras.

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 

ACTUALIZACIÓN:

Aquí está la cita de la documentación de MATLAB para structure data type bajo "Listado de los campos de una estructura" del subtítulo:

Los campos aparecen en el orden en que fueron creados.

Espero que responde a tu pregunta.

+1

Tenga en cuenta que el orden de los campos es importante cuando se asignan elementos de una matriz de estructuras. – Jonas

+0

Gracias. Simplemente no quiero confiar en un comportamiento indefinido. ¿Sabe en algún lugar de la documentación que los nombres de los campos prometen devolver los nombres de los campos en orden? Es decir. ¿dónde promete que si configuro los campos en un orden determinado, los recupero en ese orden? – AlcubierreDrive

+0

Actualicé la respuesta con una cita. – yuk

Cuestiones relacionadas