2013年4月28日 星期日

iOS NSMutableArray 與 NSDictionary 產生, 新增, 變更, 列key值, 列舉, 排序


// NSMutableArray with NSDictionary
//    alloc init
//    alloc initWithObjectsAndKeys
//    產生 NSDictionary,且賦予 value,key(group的概念)

    NSMutableArray *MyArray = [[NSMutableArray alloc] init];
    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                @"G97013",@"SN",
                                @"WeiTing Chen", @"NAME",
                                @"1976/08/22", @"DATE",
                                @"文化大學", @"INFO",
                                nil];

//    將第一筆 NSDictionary 使用 addObject 掛到 (NSMutableArray*)MyArray
    [MyArray addObject:dictionary];
    NSLog(@" count = %i",MyArray.count);
   
//    產生第二筆 NSDictionary
    dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                @"G98015",@"SN",
                                @"Jessica Chen", @"NAME",
                                @"1978/04/09", @"DATE",
                                @"夫妻大學", @"INFO",
                                nil];
//    將第二筆 NSDictionary 使用 addObject 掛到 (NSMutableArray*)MyArray
    [MyArray addObject:dictionary];
    NSLog(@" count = %i",MyArray.count);   
   

//    產生第三筆 NSDictionary
    dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                  @"85017",@"SN",
                  @"John", @"NAME",
                  @"1980/11/23", @"DATE",
                  @"info at objectgraph.com", @"INFO",
                  nil];
//    將第三筆 NSDictionary 使用 atIndexedSubscript 指定順序為 MyArray.count 掛到 (NSMutableArray*)MyArray
//    因 MyArray.count 尚未使用,此效果同等於 addObject(新增)
    [MyArray setObject:dictionary atIndexedSubscript:MyArray.count];
    NSLog(@" count = %i",MyArray.count);
       
//    透過 NSEnumerator 列舉在第三筆(當前筆,與前兩筆都是不同記憶體位置) NSDictionary 的 Key 名稱
//    key 的形態使用 id 即可(待瞭解)
    NSEnumerator *enumerator = [dictionary keyEnumerator];
    id key;
   
    while ((key = [enumerator nextObject])) {
        NSLog (@"Next key is: %@", key); 
    }

//    使用 for in 列舉第三筆 NSDictionary 的 value & key
    for (NSDictionary *dict in MyArray)
    {
        for (id key in dict) {
            NSLog(@"key: %@   value:%@", key, [dict objectForKey:key]);
        }
    }
    NSLog(@" ------------ ");
   

//    產生第四筆 NSDictionary
    dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                  @"A85017",@"SN",
                  @"AJohn", @"NAME",
                  @"A1980/11/23", @"DATE",
                  @"Ainfo at objectgraph.com", @"INFO",
                  nil];
//    將第四筆 NSDictionary 使用 atIndexedSubscript 指定順序為 MyArray.count-2 掛到 (NSMutableArray*)MyArray
//    因 MyArray.count-2 已有被使用,此效果同等於 更新資料,實際為改變記憶體指向的位置
    [MyArray setObject:dictionary atIndexedSubscript:MyArray.count-2];
    NSLog(@" count = %i",MyArray.count);
   
//    列舉 MyArray 全貌,可與上此列舉比對內容變動
    for (NSDictionary *dict in MyArray)
    {
        for (id key in dict) {
            NSLog(@"key: %@   value:%@", key, [dict objectForKey:key]);
        }
    }
   
    NSLog(@" ------------ ");
  
//    再準備一筆資料
    dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                  @"_85017",@"SN",
                  @"_John", @"NAME",
                  @"_1980/11/23", @"DATE",
                  @"_info at objectgraph.com", @"INFO",
                  nil];
//    新增掛於 MyArray 最後一筆
    [MyArray addObject:dictionary];
    NSLog(@" count = %i",MyArray.count);
   
//    列舉 MyArray 全貌
    for (NSDictionary *dict in MyArray)
    {
        for (id key in dict) {
            NSLog(@"key: %@   value:%@", key, [dict objectForKey:key]);
        }
    }
   
    NSLog(@" ------------ ");
  
//    透過 NSSortDescriptor , 表示出要以 NAME 這個 key 欄位排序
//    將 MyArray 透過排序條件,結果輸出到 sortedMyArray
    NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"NAME" ascending:YES selector:@selector(compare:)] ;
    NSArray *descriptors = [NSArray arrayWithObject:nameDescriptor];
    NSArray *sortedMyArray = [MyArray sortedArrayUsingDescriptors:descriptors];
    for (NSDictionary *dict in sortedMyArray)
    {
        for (id key in dict) {
            NSLog(@"key: %@   value:%@", key, [dict objectForKey:key]);
        }
    }
    NSLog(@" ------------ ");

沒有留言:

張貼留言