A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jack-xie 中级黑马   /  2014-10-11 00:46  /  818 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

NSSet和NSArray的对比
     1.共同点
     * 都是集合,都能存放多个多个OC对象
     * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int\char\float\结构体,枚举等)
     * 本身都不可变,都有一个可变的子类
     2.不同点
     * NSArray有顺序,NSSet没有顺序

     集合
     1.NSArray\NSMutableArray
     * 有序
     * 快速创建(不可变):@[obj1,obj2,obj3]
     * 快速访问元素:数组名[i]
     
     2.NSSet\NSMutableSet
     * 无序
     
     3.NSDictionary\NSMutableDictionary
     * 无序
     * 快速创建(不可变):@{key1 : value1, key2 : value2}
     * 快速访问元素:字典名[key]

    // 创建
    NSSet *s = [NSSet set];
    s = [NSSet setWithObject:@"Jack"];// 有一个元素的set
    s = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim", nil];// 有多个元素的set
    // s = [NSSet setWithSet:set2];// 一个和另一个set一样的set
    // s = [NSSet setWithArray:myArray];// 使用一个数组中的元素来创建set
    NSSet *s2 = [NSSet setWithObjects:@"Jack",@"Julia",@"Rose",@"Peter", nil];// 定义同时进行初始化
    unsigned long num1 = s.count;// 获得元素的个数
    id anyObj = [s anyObject];// 获取某个元素
    NSLog(@"%@",anyObj);// 访问
    // 随机拿出一个元素
    NSString *str = [s2 anyObject];
   
    // 创建一个可变数组
    NSMutableSet *s3 = [NSMutableSet set];
    // 添加元素
    [s3 addObject:@"Jack"];
    // 删除元素
    [s3 removeObject:@"Jack"];
    // 元素访问
    NSLog(@"%@",s3);
   
    /*
     字典:key ---> value
          索引 ---> 文字内容
          里面存储的东西都是键值对
     */
    // 一、创建
   
    NSDictionary *dict1 = [NSDictionary dictionary];// 创建了一个空字典
    dict1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
   
    // 定义同时进行赋值 有一组数据的字典
    NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
   
    // 有多组数据的字典:
    // 方法一:
    NSArray *objArr = @[@"apple",@"banana",@"orange"];
    NSArray *keyArr = @[@"red",@"yellow",@"orange"];
    NSDictionary *dict3 = dict2 = [NSDictionary dictionaryWithObject:objArr forKey:keyArr];
    // 第一个参数是objects数组,第二个是keys数组,二者的内容一一对应
   
    // 方法二
    NSDictionary *dict4 = [NSDictionary dictionaryWithObjectsAndKeys:
    @"Jack",@"Name",
    @"北京",@"Address",
    @"26",@"Age",nil];// 对每一组数据,先写value 再写 key,要以nil 结束
   
    // 使用编译器特性快速创建:
    NSDictionary *dict5 = @{@"name" : @"Jack",@"address" : @"beijing"};
    // 格式:@{key1 : obj1,key2 : obj2,...}; 末尾不用添加nil  注意:这样创建的字典是不可变的字典
   
    // 创建一个和另一个字典相同的字典:
    NSDictionary *dict6 = [NSDictionary dictionaryWithDictionary:dict5];
   
    // 二、常用方法
    // 1.放回字典含有多少组数据(等于key的个数)
    unsigned long num2 = dict5.count;// count是它的属性,返回key的数目
   
    // 2.比较两个字典的内容是否相同
    BOOL isEqual = [dict5 isEqualTo:dict6];
   
    // 3.返回所有的keys,返回类型是数组
    NSArray *keys = [dict5 allKeys];
   
    // 4.返回所有的objects,返回类型是数组
    NSArray *objects = [dict5 allValues];
   
    // 5.找到某个key对应的object
    id obj1 = [dict5 objectForKey:@"name"];
   
    // 6.使用编译器特性找到某个key对应的object
    id obj2 = dict5[@"name"];// 像数组一样的格式:dict5[key]
   
    // 7.返回某些keys对应的objects
    NSArray *objForKeys = [dict5 objectsForKeys:keys notFoundMarker:obj1];
   
    // 8.返回某个object对应的key(可能有多个)
    // 返回一个数组,因为一个key只能对应一个value,但是不同的keys可以对应相同的object
    NSArray *keysForObj = [dict5 allKeysForObject:@"Jack"];
   
   
    // 9.把字典的内容写到文件中
    // [dict5 writeToFile:/Users/jackxie/Desktop/jack.txt atomically:YES];
   
    // 三、字典的遍历
    // 1.经典遍历
    // 因为字典不能通过index取出key后者value,可以提前把allKeys取出来放在一个数组中,再进行遍历:
    NSArray *keys2 = [dict5 allKeys];
    for (int i=0; i<dict5.count; i++) {
        NSLog(@"%@ = %@",keys[i],dict5[keys[i]]);
    }
    // 2.快速遍历
    for (id key in dict5)
    {
        id obj = [dict5 objectForKey:keys];
        NSLog(@"%@ = %@",key,obj);
    }
    // 遍历的是字典的所有keys,因为每一个key都是不同的,根据key可以找到对应的object,但是objext可能是相同的,不能根据object找到唯一对应的key
   
    // 3.Block遍历
    [dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@ = %@",key,obj);
    }];
   
    // NSMutableDictionary 是NSDictionary的子类,它创建的字典可以添加/修改数据
    // 1.添加元素
    NSMutableDictionary *md = [NSMutableDictionary dictionary];// 创建一个可变数组
    [md setObject:@"stu"forKey:@"stu"];
    [md addEntriesFromDictionary:dict5];// 把另一本字典中的所有内容添加到这个字典中
   
    // 2.删除元素
    [md removeObjectForKey:@"name"];// 删除这个key对应的这组数据,如果字典中没有这个key,不会报错
    [md removeObjectsForKeys:keys];// 删除数组中所有keys对应的数据
    // NSLog(@"%@",md);

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

1 个回复

倒序浏览
大神,好厉害啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马