【发布时间】:2011-08-26 19:53:14
【问题描述】:
我有一个单元格数组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{:});
感谢两位!!
【问题讨论】:
-
这些结构是标量(即 1×1),还是可以是结构 数组?
标签: matlab concatenation cell-array