У меня есть массив ячеек allData
, который равен Nx1. Каждая ячейка содержит структуру со свойством names
(имя является пользовательским объектом, но, если хотите, вы можете рассматривать его как массив строк). Я хотел бы создать один массив ячеек, который содержит все имена. Например, если N = 3, так что allData
является массивом ячеек 3x1, то моя цель будет выполнена следующим образом:
A = allData{1};
B = allData{2};
C = allData{3};
allNames = [A.names B.names C.names];
Проблема с этим подходом заключается в том, что N большое и изменяется в зависимости от ввода, поэтому я надеюсь, что есть умный способ сделать это, используя cellfun
, но все, что я пробовал, терпит неудачу (например, это не работает allNames = [cellfun(@(x) {x.names}, allData)];
).
ОБНОВЛЕНИЕ: Благодаря предложенным решениям я могу получить все в один массив ячеек, где каждая ячейка содержит массив ячеек. Моя цель здесь - объединить их. Более или менее то, что у меня есть:
{A.names B.names C.names}
а то, что я хочу и не могу получить, это
{A.names{1} A.names{2} ... A.names{end} B.names{1} ... B.names{end} ...}
РЕШЕНИЕ :
Мне нужны кусочки каждого ответа ниже, так что вот решение, которое работает для меня:
от Андрей Лазарь :
allNames = arrayfun(@(x) x.name, [allData{:}], 'UniformOutput', false);
затем от gnovice :
allNames = vertcat(allNames{:});
Спасибо обоим !!