2011-11-28 47 views
0
NSMutableSet *intersection = [NSMutableSet setWithArray:newsmall]; 

//this shows an array of newsmall as expected 
NSLog(@"intersection %@", intersection); 

[intersection intersectSet:[NSSet setWithArray:newnewbig]]; 

//this shows nothing 
NSLog(@"intersection %@", intersection); 

//this shows an array of newnewbig as expected 
NSLog(@"newnewbig %@", newnewbig); 

NSArray *arrayfour = [intersection allObjects]; 

//this shows nothing 
NSLog(@"arrayfour %@", arrayfour); 

newsmall和newnewbig有一些匹配的字符串,所以我期望arrayfour顯示幾個字符串。NSSet的NSArray在NSLog中沒有任何顯示

我做錯了什麼?

回答

2

的問題是你如何intersectSet作品的理解。

我想你會期待它比較newsmall和newnewbig中字符串的內容,但它真正做的是比較對象地址。

做到這一點,你做intersectSet呼叫前:

NSUInteger index = 0; 
for(NSString * aString in newsmall) 
{ 
    NSLog(@"newsmall string %d is %p %@", index++, aString, aString); 
} 

index = 0; 
for(NSString * aString in newnewbig) 
{ 
    NSLog(@"newnewbig string %d is %p %@", index++, aString, aString); 
} 

intersectSet如果地址(%p在格式化那裏)匹配,只有工作。字符串內容可能匹配,但intersectSet關心的是字符串地址。

真的,你的解決方案是你需要做不同的方式來比較集合之間的字符串。

2

當您撥打intersectSet時,我認爲這是比較指針,而不是您的NSString的內容。

看一看在這裏,它可以幫助:SO Question