Matlab: как преобразовать массив ячеек структур в массив структур с помощью оператора двоеточия? - PullRequest
6 голосов
/ 08 февраля 2012

Предположим, есть массив ячеек, инициализированный со следующими значениями структуры.

% 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';

Действительно ли возможно выполнить это без использования cell2struct или индексации для цикла? Можно ли использовать сделку или подобное?

Примечание: если вы не знаете решения, пощадите подсказку "best-Practice" или аналогичный метод "махания рукой".

Ответы [ 2 ]

8 голосов
/ 08 февраля 2012

Вы можете использовать cell2mat:

cell2mat(phone_record)

ans =

1x2 struct array с полями:

имя
телефон

1 голос
/ 11 ноября 2013

Ну

phone_book = cat( 2, phone_record{ :})

действительно использует оператор двоеточия и даст тот же результат, что и cell2mat (phone_record).

Другое решение без двоеточия -

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

с преимуществом преобразования структур на лету, например, добавлением (пропуском) полей. Здесь мы используем идеальность, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...