I have a cell array allData
which is Nx1. Each cell contains a structure with a names
property (the name is a custom object, but think of it as a cell array of strings if you like). I would like to create a single cell array that contains all of the names. For example, if N=3, so that allData
is a 3x1 cell array, then the following would accomplish my goal:
A = allData{1};
B = allData{2};
C = allData{3};
allNames = [A.names B.names C.names];
The problem with this approach is that N is large and changes depending on the input, so I'm hoping that there is a clever way to do this using cellfun
, but everything that I've tried fails (e.g. it doesn't work to do allNames = [cellfun(@(x) {x.names}, allData)];
).
UPDATE: Thanks to the suggested solutions, I can get everything into one cell array where each cell contains a cell array. My goal here is to concatenate these. More or less, what I have is:
{A.names B.names C.names}
and what I want and cannot seem to get is
{A.names{1} A.names{2} ... A.names{end} B.names{1} ... B.names{end} ...}
SOLUTION: I needed pieces of each answer below, so here's the solution that worked for me:
from Andrew Lazarus:
allNames = arrayfun(@(x) x.name, [allData{:}], 'UniformOutput', false);
then, from gnovice:
allNames = vertcat(allNames{:});
Thanks to both!!