2012-02-07 17 views
6

Supongamos que hay una matriz de celdas inicializada con los siguientes valores de estructura.Matlab: ¿cómo convertir la matriz de estructuras en matriz de estructuras con el operador de dos puntos?

% Phone book 
phone_record{1} = struct('name', 'Bob', 'phone', '1233323'); 
phone_record{2} = struct('name', 'Mike', 'phone', '3245524'); 

% How to make such or similar one-liner work? 
% phonebook(:) = phone_record{:} 

% Expected: 
% phonebook(1).name = 'Bob'; 
% phonebook(1).phone= '1233323'; 
% phonebook(2).name = 'Mike'; 
% phonebook(2).phone = '3245524'; 

¿Es realmente posible para lograr esto w/o usando cell2struct o de bucle de indexación? ¿Se puede usar acuerdo o similar?

Nota: si no conoce la solución, evite las sugerencias de "mejores prácticas" o similares "agitando a mano".

+0

Tenga en cuenta que la matriz para la asignación de matriz no por bucle funciona muy bien como aquí http://stackoverflow.com/questions/8372619/understanding-colon-notation-in-matlab –

+0

Probablemente es mala forma decir a la gente que intenta para ayudarlo a "por favor ahorre" la mejor práctica "aludiendo o similar" agitando la mano ". La condescendencia rara vez se considera un incentivo para que las personas dediquen tiempo a su día para tratar de ayudarlo. – Marc

+0

¡Me disculpo si eso parece ser grosero, pero es una pregunta técnica y la respuesta que obtuve es muy acertada! Desafortunadamente, hay miembros en la comunidad a los que les gusta hacer comentarios innecesarios ;-) o comentarios como "wow, yo no haría eso si fuera usted ...", "considere usar use oop" y tonterías similares no relacionadas. Tengo una pregunta técnica Mi punto es que si no conoce la respuesta, piense en restringirse diciendo algo y ahorre tiempo a otros usuarios que leerían esta base de conocimiento en busca de una solución. –

Respuesta

7

Puede utilizar cell2mat:

cell2mat(phone_record) 

ans =

1x2 matriz de estructura de campos:

nombre
teléfono

+1

Gracias, me acabas de ahorrar una gran cantidad de trabajo. – Gdalya

+0

¡Esto también me salvó, gracias! –

1

Bueno,

phone_book = cat(2, phone_record{ :}) 

no efectivamente utilizar el operador de colon, y dará el mismo resultado que cell2mat (phone_record).

Otra solución no colon es

cellfun(@(x) x, phone_record).' 

con el beneficio de la transformación de las estructuras sobre la marcha, por ejemplo la adición de (faltantes) campos. Aquí usamos la idendidad, por supuesto.

Cuestiones relacionadas