String 从嵌套单元格数组中删除重复字符串
我有一个名为String 从嵌套单元格数组中删除重复字符串,string,matlab,duplicates,cell-array,flatten,String,Matlab,Duplicates,Cell Array,Flatten,我有一个名为tmp的1x234单元数组,我想从中删除所有重复项。tmp的某些元素可以是: tmp{1, 3} -> 'Ro' tmp{1, 167}{1, 1} -> 'Ro' tmp{1, 167}{1, 2} -> 'CvF' 在前两个选项中,我只想保留tmp{1167}{1,1}->'Ro' 此外,我还想打开单元格中包含单元格的条目,例如: tmp{1, 167}{1, 1} -> 'Ro' tmp{1, 167}{1, 2} -> 'CvF' 进入: 我
tmp
的1x234单元数组,我想从中删除所有重复项。tmp
的某些元素可以是:
tmp{1, 3} -> 'Ro'
tmp{1, 167}{1, 1} -> 'Ro'
tmp{1, 167}{1, 2} -> 'CvF'
在前两个选项中,我只想保留tmp{1167}{1,1}->'Ro'
此外,我还想打开单元格中包含单元格的条目,例如:
tmp{1, 167}{1, 1} -> 'Ro'
tmp{1, 167}{1, 2} -> 'CvF'
进入:
我怎样才能实现这两个目标;DR:
unq=unique([tmp{:}])代码>
如果最大嵌套级别为2(即单元格中的单元格),则展平数组不需要任何类型的递归函数,可以使用简单的连接来实现。请参见下面的完整示例:
函数unq=q66221704()
%%生成一些数据:
rng(66221704);%为了再现性
N=2;
tmp=单元(1234);
对于k=1:numel(tmp)
如果rand(1)<0.6%,则以一定概率创建嵌套单元
tmp{k}=getLowerCastering(N);
其他的
tmp{k}={getlowercastering(N),getlowercastering(N)};
结束
结束
%%展平单元阵列:
new=[tmp{:}];%尺寸=1x352
%%保持统一:
unq=唯一(新);%尺寸=1x259
结束
函数c=GetLowerCastering(nChars)
c=字符(随机数([97122],[1,nChars]);
结束
这是可能的,是的。但是,具体的实现取决于数据的结构,特别是嵌套的深度、是否只包含单元格等。还取决于解决方案的效率。如果所有数据都是嵌套在深度未知的单元格中的字符向量,则可以创建一个字符串向量,然后迭代+递归地“取消装箱”单元格数组,并将条目分配给该向量。一旦您的数据结构被展平,删除重复项就很简单了(使用unique
)。谢谢您的回答。很难理解你的意思。它的巢不是很深。最深的级别是我之前发布的级别。tmp{1,167}{1,1}->'Ro'tmp{1,167}{1,2}->'CvF'数组的内容仅为字母。
tmp{1, 167}-> 'Ro'
tmp{1, 168}-> 'CvF'