13

辞書のキーがメソッドパラメータの文字列と同じであることを確認するにはどうすればよいですか? つまり、以下のコードでは、dictobj は NSMutableDictionary のオブジェクトであり、dictobj の各キーについて、文字列と比較する必要があります。これを達成する方法は?NSString のキーを型変換する必要がありますか??

-(void)CheckKeyWithString:(NSString *)string
{
   //foreach key in NSMutableDictionary
   for(id key in dictobj)
     {
       //Check if key is equal to string
       if(key == string)// this is wrong since key is of type id and string is of NSString,Control doesn't come into this line
          {
           //do some operation
          }
     }
}
4

1 に答える 1

39

演算子を使用すると、==ポインター値が比較されます。これは、比較しているオブジェクトがまったく同じオブジェクトで、同じメモリ アドレスにある場合にのみ機能します。たとえばThese objects are different、文字列は同じですが、メモリ内の異なる場所に格納されているため、次のコードは戻ります。

NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
    NSLog(@"These objects are the same");
else
    NSLog(@"These objects are different");

文字列を比較する場合、通常はポインタではなく文字列のテキスト コンテンツを比較する必要があるため-isEqualToString:NSString. このコードはThese strings are the same、ポインター値ではなく文字列オブジェクトの値を比較するため、返されます。

NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
    NSLog(@"These strings are the same");
else
    NSLog(@"These string are different");

任意の Objective-C オブジェクトを比較するには、 のより一般的なisEqual:方法を使用する必要がありNSObjectます。は、両方のオブジェクトがオブジェクトであることがわかっている場合に使用する-isEqualToString:最適化されたバージョンです。-isEqual:NSString

- (void)CheckKeyWithString:(NSString *)string
{
   //foreach key in NSMutableDictionary
   for(id key in dictobj)
     {
       //Check if key is equal to string
       if([key isEqual:string])
          {
           //do some operation
          }
     }
}
于 2010-02-19T03:27:13.517 に答える