NSSet的NSArray在NSLog中没有显示任何内容

时间:2011-11-28 10:41:41

标签: ios nsarray intersection nsset

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显示几个字符串。

我做错了什么?

2 个答案:

答案 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关心的是字符串地址。

实际上,您的解决方案是您需要采用不同的方式来比较集合之间的字符串。