Matlab:如何删除具有其他集合作为子集的单元格元素

问题描述 投票:0回答:1

我有一个单元格,其中列出了数组:

C = {[1,2,3,4], [3,4], [2], [4,5,6], [4,5], [7]}

我要输出:

D = {[3,4], [2], [4,5], [7]}

D中的那些集合是唯一包含D中其他任何集合的集合。

关于类似问题,请参考以下link。尽管很优雅,但我仍无法修改代码以适应我的特定问题。

我非常感谢您提供解决方案的帮助。

谢谢!

matlab set cell-array
1个回答
0
投票
您可以简单地通过将每个元素与其下一个元素进行比较,并查看下一个元素是否是当前元素的子集,如果是,则删除较大的元素。这是满足您需求的简单代码:

C = {[1,2,3,4], [3,4], [2], [4,5,6], [4,5], [7]}; % Initialize D with a copy of C D = C; % Compare each element i with other elements j = i+1, i+2, .... for i = 1:numel(C)-1 for j = i+1:numel(C) % Check to see if C{j} exists in C{i} if contains(num2str(C{i}),num2str(C{j})) % Make unwanted elements empty D{i} = []; end end end % Remove empty elements D(cellfun(@isempty,D)) = [];

© www.soinside.com 2019 - 2024. All rights reserved.