天天看點

黑馬程式員——Foundation架構——集合類(NSSet、NSArray等)(二)

------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------

NSSet數組和子類NSMutableSet的基本操作

NSSet和NSArray都是不可變數組,一旦建立就無法改變。NSSet是無序的集合簡單操作

// 建立NSSet集合
NSSet *set = [NSSet set]; // 一旦建立為空永遠為空
NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];
    
// 随機擷取NSSet集合中的元素
NSString *str = [set2 anyObject];
NSLog(@"%@",str);
           

NSMutableSet的簡單操作

建立可變set集合

NSMutableSet *mutableSet = 【NSMutableSet set];
           

為set添加集合

[mutableSet addObject:@"Jack"];
[mutableSet addObject:@"Rose"];
           

删除元素

[mutableSet removeObject:@"Jack"];
           

NSArray和NSSet數組的對比

1,都可以存放任意類型的OC對象集合,都不能存放基本資料類型類型

2,本身都是不可變的,但是自類都是可變的

3,NSArray是有序的集合,NSSet是無序的集合

NSDictionary和NDMutableDictionary

NSDictionary和他的子類NDMutableDictionary都是以key/value的形式存在的,NSDictionary本身為不可變集合

NSDictionary也是無序集合

字典集合中存儲的值時以鍵值對的形式存在的,如果存在相同的key那麼後面的key的值會被覆寫。但是允許value重複

NSDictionary的基本操作

常見建立NSDictionary集合的四種方式

建立一個空的字典集合類型

NSDictionary *dic = [NSDictionary dictionary ];
           

建立隻有一個值得字典集合

NSDictionary *dic1 = [NSDictionary dictionaryWithObject :@"Jack " forKey :@"name "];
           

建立多個值得字典集合

NSArray *keys = @[@"name ",@"address",@"e-mail"];
NSArray *values = @[@"Jack",@"北京",@jack @163.com";
NSDictionary *dic3 = [NSDictionary dictionaryWithObject :values  forKey :keys];
           

通過鍵值對的方式建立

NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"Jack",@"name",
                          @"北京",@"address",
                          @"[email protected]",@"e-mail",nil];
           

類似于數組的建立方式(推薦使用)

NSDictionary *dic5 = @{@"name":@"Jack",
                           @"address":@"北京",
                           @"e-mail":@"[email protected]"};
           

取值:根據相應的key去除對象的值

NSString *name = [dic1 objectForKey:@"name"]; // 傳回 Jack
           

傳回鍵值對的個數

NSUInteger count = dic5.count; // 傳回 4
           

周遊NSDictionary數組兩種方式

第一種方式:擷取字典中所有的鍵

NSArray *allKeys = [dic5 allKeys]; // 擷取的鍵在數組中是無序的
    
for (int i = 0; i < dic5.count; i++) {
    NSString *key = allKeys[i];
    NSString *value = dic5[key];
    NSLog(@"%@-->%@",key,value);
}
           

第二種方式:将字典中的鍵值對傳遞給block中的key和obj

[dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    NSLog(@"%@-->%@",key,obj);
// 周遊一次立即停止 *stop = YES;
}];
           

NDMutableDictionary的基本操作

建立可變字典

NDMutableDictionary *mutableDic  = [NDMutableDictionary dictionary ];
// NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 錯誤的寫法因為右邊傳回的是不可變的字典
           

為可變字典添加元素

[mutableDic setObject:@"Rose" forKey:@"name"];
[mutableDic setObject:@"北京" forKey:@"address"];
           

移除字典中的元素

[mutableDic removeAllObjects];
[mutableDic removeObjectForKey:@"name"];
           

列印

NSLog(@"%@",mutableDic); // 輸出:address = "\U5317\U4eac"; name = Rose; \U5317\U4eac 就是北京存儲的形式
           

示例:設計一個通訊錄裡面包含了四個人的姓名、電話、位址

NSArray *friends = @[
         @{@"name":@"張三",@"phone":@"13993214321",@"address":@"北京"},
         @{@"name":@"李斯",@"phone":@"13498766789",@"address":@"上海"},
         @{@"name":@"王武",@"phone":@"15898766789",@"address":@"天津"},
         @{@"name":@"趙柳",@"phone":@"18798766789",@"address":@"南京"}];
           

擷取‘李斯’的通訊錄資訊

NSDictionary *dic = friends[1];
NSLog(@"%@",dic);