如何提供2个列表之间的差异列表

时间:2015-01-21 08:58:49

标签: matlab

我有2个细胞

exp = {'test','tat','toto'};
act = {'test','toto','tat','pto'};

并想检查这些列表是否相等。如果没有相同数量的元素,我怎么能提供差异列表?

3 个答案:

答案 0 :(得分:2)

使用setdiff输入的顺序很重要。 setdiff(A,B)会返回A中不在B 中的条目列表,但不会返回B中不在A的条目exp = {'test','tat','toto'}; act = {'test','toto','tat','pto'} setdiff(exp,act); % empty because there is nothing in exp which isn't in act setdiff(act,exp); %returns 1 x 1 cell, 'pto'.

setxor(A,B)

相反,请使用A,它返回的值不在Bexp = {'test','tat','toto','pta'}; act = {'test','toto','tat','pto'}; setxor(exp,act) % returns 'pta','pto' 的交集处。输入顺序并不重要:

{{1}}

答案 1 :(得分:0)

简而言之,请使用setdiff;看到文档,有一个关于你想要做什么的例子。

修改

需要解释setdiff。根据文件:

  

C = setdiff(A,B)返回A中不在B中的数据。

必须准确理解这句话:它返回的A不是B的数据。所以setdiff与其参数不对称!对于您的问题,如果A的所有元素都在B中,即使B更大,结果集也是空的。

为了得到两个集合之间的差异,换句话说,你想要一个对称函数和它们的参数,Matlab提供了另一个函数,setxor

  

C = setxor(A,B)返回不在其交点中的A和B的数据(对称差)。

答案 2 :(得分:0)

您可以使用setdiff命令。

exp = {'test', 'tat', 'toto'}; 
act = {'test', 'toto', 'tat', 'pto'};
diff = setdiff(exp, act);

您可以在文档中找到它: http://www.mathworks.com/help/matlab/ref/setdiff.html?refresh=true