Objective-C構文の辞書オブジェクト(NSDictionary/SMutableDictionary)


Java言語やC言語の開発をしたことのある方はキーワードmapをよく知っているでしょうが、データをキー値対児の形で保存することができ、値を取るときにKEYで直接対応する値を手に入れることができるので便利です.Objective-C言語では辞書オブジェクトはこのことをしていますが、同じ辞書オブジェクトに複数の異なるタイプのデータを保存することができます.JavaやCでは宣言された同じタイプのデータしか保存できません.そのキーワードはNSDictionaryとNSMutableDictionaryです.私の前の文章を読んだことがある友达はキーワードの構造からこの2つの違いを見ることができます.前者は可変辞書であるか,あるいは可変辞書であることは明らかである.
1.可変辞書の作成
[NSDictionary dictionaryWithObjectsAndKeys:..] :               ,      nil    。
[NSDictionary initWithObjectsAndKeys:..] :             ,      nil    。
[dictionary count]:          。
[dictionary keyEnumerator]:       KEY   NSEnumerator ,NSEnumerator  Java        ,                 KEY 。
[dictionary  objectEnumerator]:       value   NSEnumerator ,             KEY     Value 。
[dictionary objectForKey:key]:     KEY        KEY      。
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  
    //         
    
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"  MOMO",@"name",@"15810463139",@"number", nil];
    
    //       
    int count = [dictionary count];
    NSLog(@"      : %d",count);
    
    //       KEY 
    NSEnumerator * enumeratorKey = [dictionary keyEnumerator];
    
    //        KEY  
    for (NSObject *object in enumeratorKey) {
        NSLog(@"  KEY  : %@",object);
    }
    
    //       Value 
     NSEnumerator * enumeratorValue = [dictionary objectEnumerator];
    
    //        Value  
    for (NSObject *object in enumeratorValue) {
        NSLog(@"  Value  : %@",object);
    }
    
    //  KEY  value
    NSObject *object = [dictionary objectForKey:@"name"];
    
    if (object != nil) {
        NSLog(@"  KEY   value : %@",object);
    }
    
    
    
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

2.可変辞書オブジェクトの作成
NSMutableDictionaryはNSDictionaryのサブクラスであるため、NSDictionaryのメソッドを継承している.
[NSMutableDictionary dictionaryWithCapacity:10] :                  10.,           10           ,          。
[NSMutableDictionary initWithCapacity:10]  :             10。
[dictionary setObject:@"  MOMO" forKey:@"name"] :              ,   key name     MOMO。         KEY          KEY  。
[dictionary removeAllObjects..] :            。
[dictionary removeObjectForKey..] :        KEY    。
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  
    //         
    
    //      ,      10
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:10];
   
    //          
    [dictionary setObject:@"  MOMO" forKey:@"name"];
    
    [dictionary setObject:@"15810463139" forKey:@"number"];
    
    
    //  KEY  value
    NSObject *object = [dictionary objectForKey:@"name"];
    
    if (object != nil) {
        NSLog(@"  KEY   value : %@",object);
    }
    
    
    
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

辞書クラスの存在は大量のデータの中で検索するのが便利であることを解決するためで、keyを通じて直接valueを見つけるので速度が速くて、一つ一つの遍歴を避けて探す効率が低下して、辞書クラスをよく使うとあなたのプログラムをスピードアップすることができます.