OC-集合2(字典,NSSet)

来源:互联网 发布:51testing 软件测试 编辑:程序博客网 时间:2024/06/08 10:35

字典

  • 字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。即:存储方式为通过 键-值 对的方式来存放数据的一种无序集合。

  • 字典也被称为散列表或关联数组。

  • 不同于数组,字典使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。

  • 一般通过key来操作object。某种意义上,对字典的运算实际上就是对key值的运算。

  • 字典分为不可变字典NSDictionary和可变字典NSMutableDictionary。

    1.初始化:方法用逗号

       NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];        NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];

2.字典的快速生成

      //key : value        NSDictionary *dictionary3 = @{@"1":@"one",                                      @"2":@"two"};        NSLog(@"dic3 = %@",dictionary);        //简化适合不可变字典,不推荐可变字典使用。

3.查询一个对象

      id object = [dictionary3 objectForKey:@"2"];        NSLog(@"object = %@",object);

4.取出所有的key

      NSArray *keys = [dictionary3 allKeys];        NSLog(@"keys = %@",keys);

5.取出所有的对象

      NSArray *values = [dictionary3 allValues];      NSLog(@"values = %@",values);

字典的遍历

//取出字典中所有的key或object,然后通过数组的遍历方法逐个取出对象:      NSArray *keys = [dictionary3 allKeys];        //for循环        for (int i = 0; i < keys.count; i ++) {            NSString *key = [keys objectAtIndex:i];            id object = [dictionary3 objectForKey:key];            NSLog(@"objec = %@",object);        }       // 快速枚举        for (id keys in dictionary3) {            NSLog(@"object1 = %@",keys);            id obj = [dictionary3 objectForKey:keys];            NSLog(@"obj = %@",obj);        }//注意:键不可以重复,值可以    //  当设置的key值与原有key值重复时,会直接覆盖原来的键值对,这 也是更改字典数据的方法。    //  和数组一样,在遍历的同时不要对字典做出改动,那样或导致异常。

NSMutableDictionary

  //初始化        NSMutableDictionary *mutableDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil];        //增        [mutableDic1 setObject:@"five" forKey:@"5"];        NSLog(@"dic1 = %@",mutableDic1);        //删        [mutableDic1 removeObjectForKey:@"5"];        NSLog(@"dic1 = %@",mutableDic1);        //查       id object33 = [mutableDic1 objectForKey:@"4"];        NSLog(@"ob33 = %@",object33);        //改(根据key将原来的覆盖掉)        [mutableDic1 setObject:@"three three" forKey:@"3"];        NSLog(@"mudic1 = %@",mutableDic1);//- setObject:forKey:方法,如果在字典中无法找到该key,则做添加处理。

NSSet

完全无序集合NSSet;

/*初始化如下,非常类似数组:分为NSSet和NSMutableSet*/ //用于去除重复数        NSSet *set1 = [NSSet setWithObjects:@"1",@"2",@"2",@"5",@"5",@"7", nil];/*里面的数据无法按照顺序取出,只能取出随即一个,或者一次性全部取出:*/        //取一个       id object5 = [set1 anyObject];        NSLog(@"ob5 = %@",object5);        //取所有的       NSArray *setArr =  [set1 allObjects];        NSLog(@"setArr = %@",setArr);   /*   NSSet对象中不能存放重复对象,如果出现重复,最终只会保留一个,NSSet也常用来清除其他集合中的重复对象*/             //去除数组里面的重复数        NSArray *arr = @[@"1",@"2",@"2",@"5",@"5",@"7"];        NSSet *set2 = [NSSet setWithArray:arr];        NSArray *arr2 = [set2 allObjects];        NSLog(@"arr2 = %@",arr2);
2 0