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とnew​​newbigにはいくつかの一致する文字列があるため、arrayfourにはいくつかの文字列が表示されると思います。

私は何を間違えましたか?

4

2 に答える 2

2

あなたが呼ぶときintersectSet、私はそれがあなたの内容ではなく、ポインタを比較していると思いますNSString

ここを見てください、それは役立つかもしれません:SO質問

于 2011-11-28T10:54:27.863 に答える
2

問題は、どのように機能するかを理解することですintersectSet

newsmallとnew​​newbigの文字列の内容を比較することを期待していると思いますが、実際に行っているのはオブジェクトアドレスの比較です。

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が気にするのは文字列アドレスです。

つまり、実際の解決策は、セット間で文字列を比較する別の方法を実行する必要があるということです。

于 2011-11-28T10:55:02.503 に答える