2012년 2월 10일 금요일

NSDictionary


Dictionary

키와 인스턴스로 이루어진 데이터의 모임입니다
키로 인스턴스를 찾을 수 있습니다.<?xml:namespace prefix = o />
키는 유일해야 하며 일반적으로 NSString 입니다.
키와 연결된 인스턴스는 데이터 유형에 관계가 없지만 nil은 안됩니다.

1. NSDictionary
NSDictionary는 수정이 불가능한 Dictionary입니다.

멤버 메서드
+(id)dictionary
비어있는 dictionary 생성
+(id)dictionaryWithObject:(id)anObject forKey:(id)aKey
aKey key로 해서 anObject를 내용으로 갖는 인스턴스를 갖는 dictionary 생성
-(id)initWithObjects:(NSArray *)Objects forKeys:(NSArray *)Keys
Keys를 키 값으로 해서 Objects를 내용으로 초기화
-(id)initWithObjects:(id *)Objects forKeys:(id *)Keys count:(NSUInteger)count
Keys를 키 값으로 해서 Objects를 내용으로 count 개수 만큼 초기화
-(id)initWithObjectsAndKeys:(id)Object,(id)Key,… nil
Object Key로 초기화
-(NSUInteger)count
개수 리턴
-(id)objectForKey:(id)aKey
aKey에 해당하는 인스턴스 리턴
-(NSArray *)allKeys
모든 키값을 배열로 리턴
-(NSArray *)allValues
모든 키를 포함하는 배열을 리턴
-(NSEnumerator *)keyEnumerator
키 값을 열거자로 리턴
-(NSEnumerator *)objectEnumerator
키 값을 열거자로 리턴
-(NSArray *)allKeysForObject:(id)anObject
anObject를 갖는 모든 키를 배열로 리턴


NSDictionary * greeting = [[NSDictionary alloc] initWithObjectsAndKeys:@"안녕하세요", @"아침인사", @"식사 하셨어요", @"오후인사", @"내일뵐께요",@"저녁인사",nil ];
    NSLog(@"아침인사: %@", [greeting objectForKey: @"아침인사"]);
        NSLog(@"점심인사: %@", [greeting objectForKey: @"오후인사"]);
        NSLog(@"저녁인사: %@", [greeting objectForKey: @"저녁인사"]);
   
    NSArray * keys = [greeting allKeys];
    NSArray * objects = [greeting allValues];
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [objects objectAtIndex:i]);
    }    
   
    NSDictionary * greeting1 = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
    NSEnumerator *it;
    it = [greeting1 keyEnumerator];
    id var;
    for(i=0; i<[greeting count]; i++)
    {
       var = [it nextObject];
       NSLog(@"Key:%@ Value:%@", var, [greeting objectForKey: var]);
    }

=========================================================================================
2. NSMutableDictionary
NSMutableDictionary는 수정이 가능한 Dictionary입니다.
아래와 같은 메서드가 추가됩니다.
+(id) dictionaryWithCapacity:size
size 크기만큼으로 메모리 할당
-(id)initWithCapacity:size
size 크기만큼으로 초기화
-(void)setObject:(id)anObject forKey:(id)aKey
aKey Key anObject를 추가합니다.
둘 다 nil이면 안되고 aKey가 존재한다면 내용은 대체됩니다.
-(void)removeAllObjects
모든 엔트리 삭제
-(void)removeObjectForKey:key
key에 해당하는 인스턴스 삭제
-(NSArray *)keysSortedByValueUsingSelector:@selector(비교메서드:)
이 경우 내용에 따라서 정렬한 후 key를 배열로 리턴합니다.

NSMutableDictionary *greeting = [NSMutableDictionary dictionary];
        [greeting setObject:@"안녕하세요" forKey: @"아침인사"];
        [greeting setObject:@"식사 하셨어요" forKey:@"오후인사"];
        [greeting setObject:@"내일뵐께요" forKey:@"저녁인사"];
        [greeting setObject:@"잘자요" forKey:@"밤인사"];
    [greeting setObject:@"밤새 별일 없으셨어요" forKey: @"아침인사"];
   
    NSArray * keys = [greeting allKeys];
      
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }    
   
    [greeting removeObjectForKey:@"밤인사"];
    keys = [greeting allKeys];
    NSLog(@"삭제한 후 -------------");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }

    keys = [greeting keysSortedByValueUsingSelector:@selector(compare:)];

    NSLog(@"내용으로 정렬 한 후 ----");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }