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显示几个字符串。
我做错了什么?
答案 0 :(得分:2)
当您致电intersectSet
时,我认为它是在比较指针,而不是您NSString
的内容。
看看这里,它可能会有所帮助:SO Question
答案 1 :(得分: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关心的是字符串地址。
实际上,您的解决方案是您需要采用不同的方式来比较集合之间的字符串。