1. 程式人生 > >OC字典(NSDictionary)和集合(NSSet)的總結

OC字典(NSDictionary)和集合(NSSet)的總結

1.不可變字典

// 字典裡的元素是無序

1.1 建立不可變字典 (初始化方法,便利構造器)

    // 初始化方法(值在前,鍵在後)
    NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1的value",@"1",@"2的value",@"2",nil];
    // 輸出dic1
    NSLog(@"%@",dic1);
    // 便利構造器(值在前,鍵在後)
    NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"3的value",@"3",@"4的value",@"4", nil];
    // 輸出dic2
    NSLog(@"%@",dic2);
    // 字面量(鍵在前,值在後)(常用)
    NSDictionary *dic3 = @{@"5":@"5的value",@"6":@"6的value"};
    NSLog(@"%@",dic3);

1.2 不可變字典的幾個屬性(count,allkeys,allvalues)

    // count 字典裡的鍵值對的個數
    NSInteger count = dic1.count;
    NSLog(@"%ld",count);
    // allKeys 字典裡的所有key的值
    NSLog(@"%@",dic1.allKeys);
    // allValues 字典裡所有的value的值
    NSLog(@"%@",dic1.allValues);

1.3 遍歷不可變字典 (遍歷的三種方式)

    // 第一種:for
    for(int i = 0; i < dic1.count; i++){
        NSLog(@"%@ : %@",dic1.allKeys[i],dic1.allValues[i]);
    }
    // 第二種:for in 藉助allKeys
    for (NSString *key in dic1.allKeys) {
        NSLog(@"%@ : %@",key,[dic1 objectForKey:key]);
    }
    // 第三種:for in直接訪問(常用)
    for (NSString *key in dic1) {
        NSLog(@"%@ : %@",key,dic1[key]);
    }

2.可變字典

2.1 建立可變字典 (兩種方式)

    // 2.1 建立可變字典 (兩種方式)
    // 初始化方法(值在前,鍵在後)
    NSMutableDictionary *dic4 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"7的value",@"7",@"8的value",@"8", nil];
    // 輸出
    NSLog(@"%@",dic4);
    // 便利構造器(值在前,鍵在後)
    NSMutableDictionary *dic5 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"9的value",@"9",@"10的value",@"10", nil];
    // 輸出
    NSLog(@"%@",dic5);

2.2 可變字典的方法(新增,修改,刪除)

    // 向可變字典中新增鍵值對
    [dic5 setObject:@"11的value" forKey:@"11"];
    // 輸出
    NSLog(@"%@",dic5);
    // 修改可變字典中的值
    [dic5 setObject:@"修改後的10的value" forKey:@"10"];
    // 輸出
    NSLog(@"%@",dic5);
    // setObject 當字典中有相對於的key的時候就把value修改,如果沒有就新增一個新的鍵值對
    // 刪除
    [dic5 removeObjectForKey:@"9"];
    // 輸出
    NSLog(@"%@",dic5);
    // 清空字典
    [dic5 removeAllObjects];
    // 輸出
    NSLog(@"%@",dic5);

2.3 遍歷可變字典

         和不可變字典的遍歷方式一樣,請看1.3,在此就不過多贅述了

3.字典和陣列的巢狀使用

    // 新建八個陣列物件
    NSArray *arr1 = @[@"劉備",@"諸葛亮",@"趙子龍"];
    NSArray *arr2 = @[@"曹操",@"曹丕",@"曹植"];
    NSArray *arr3 = @[@"馬騰",@"馬超",@"馬鐵"];
    NSArray *arr4 = @[@"孫權",@"孫策",@"孫堅"];
// 3.1 兩層巢狀
    // 新建一個字典,字典的元素是上面的陣列
    NSDictionary *dic = @{@"arr1":arr1, @"arr2":arr2,@"arr3":arr3,@"arr4":arr4};
    // 遍歷dic字典,輸出字典裡的數組裡的元素
    for (NSString *tempKey1 in dic) {
        NSArray *tempArr1= dic[tempKey1];
        for (NSString *tempStr2 in tempArr1) {
            // 輸出
            NSLog(@"%@",tempStr2);
        }
        // 輸出分界線
        NSLog(@"\n");
    }

// 3.2 三層巢狀
    // 新建兩個字典,字典的元素是上面定義的陣列物件
    NSDictionary *dic1 = @{@"arr1":arr1,@"arr2":arr2};
    NSDictionary *dic2 = @{@"arr3":arr3,@"arr4":arr4};
    // 新建一個數組,陣列元素是上面建立的字典物件
    NSArray *arr = @[dic1,dic2];
    
    // 遍歷輸出
    for (NSDictionary *tempDic1 in arr) {
        for (NSString *tempKey2 in tempDic1) {
            NSArray *tempArr2 = tempDic1[tempKey2];
            for (NSString *tempStr3 in tempArr2) {
                // 輸出
                NSLog(@"%@",tempStr3);
            }
            // 輸出分界線
            NSLog(@"\n");
        }
    }

4. 集合

4.1 建立集合

    // 初始化方法
    NSSet *set1 = [[NSSet alloc] initWithObjects:@"first",@"second",@"third", nil];
    NSLog(@"%@",set1);
    // 便利構造器
    NSSet *set2 = [NSSet setWithObjects:@"one",@"two",@"three", nil];
    NSLog(@"%@",set2);

4.2 遍歷集合

    for (NSString *temp in set1) {
        NSLog(@"%@",temp);
    }

4.3 集合的使用(主要是和陣列配合使用)

   集合的主要作用是和陣列配合使用,去除掉陣列中重複的元素
   正常情況下要去除一個數組中重複的元素,每一個元素都需要和其他元素比較一遍,使用集合和陣列配合將會大大的提升效率
   解釋:因為集合中的元素不允許重複,當陣列中重複的元素新增到集合中的時候,集合會自動遮蔽掉不新增,當再把集合中的元素新增到陣列中的時候,陣列中的元素就沒有重複的了,但是因為集合裡的元素是無序的所以去重後的陣列中的元素是無序的,需要重新排序.
    // 新建一個數組
    NSArray *arr = @[@"8",@"1",@"2",@"3",@"1",@"1",@"2",@"5"];
    // 新建一個集合將陣列中的元素新增到集合中
    NSSet *set = [NSSet setWithArray:arr];
    // 新建一個新的陣列,將集合中的元素新增到新陣列中
    NSArray *newArr = [NSArray arrayWithArray:set.allObjects];
    // 輸出新的陣列
    NSLog(@"%@",newArr);