2015-01-21 58 views
0

之间差异的名单我有2个细胞如何提供2所列出

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

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

+0

您想在您的示例中使用3x4结果吗?或者哪个尺寸? – 2015-01-21 10:59:19

+0

@LuisMendo:我想获得差异列表,例如我将这些单元格转换为字符并想要比较并获得列表:'pto'在我的示例中为 – lola 2015-01-21 11:10:22

+1

@lola:根据您的意见在答案上:“* 33x19char和34x19char *”,“*这些2 char *之间的差异”,我想你正在做'char(exp)'将字符串转换为'char'数组。这将生成一个字符矩阵,并用空格填充空白部分。 这不是你应该做的!保持单元格内的字符串。 – knedlsepp 2015-01-21 14:27:52

回答

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),它返回未中的AB的交点的值。输入顺序无关紧要:

exp = {'test','tat','toto','pta'}; 
act = {'test','toto','tat','pto'}; 
setxor(exp,act) % returns 'pta','pto' 
0

总之,使用setdiff;请参阅文档,有一个关于你想要做什么的例子。

编辑

说明需要有关setdiff。根据文档:

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

这句话必须完全理解:它返回的不是数据在B中。因此setdiff与它的参数不是对称的!对于你的问题,如果A的所有元素都在B中,即使B较大,结果集也是空的。

要获得两个集合之间的差异,换句话说,你想有一个对称函数WRT他们的论点,MATLAB提供了另一种功能,setxor

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

+0

它返回一个emty字符串,而我有这两个字符的差异 – lola 2015-01-21 10:57:47

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

+0

我已经尝试过,但没有工作:它返回一个空字符串和矩阵 – lola 2015-01-21 10:55:40

+0

我已经将这些变量转换为char之前:exp和act是33x19char和34x19char然后差异给一个空的字符串,而有一个差异 – lola 2015-01-21 10:57:21