2015-01-21 93 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