zoukankan      html  css  js  c++  java
  • 02-NSArray、NSSet、NSDictionary 集合类

    NSArrayNSSetNSDictionary 集合类  

    可以用来装东西

    OC数组只能存放OC对象、不能存放非OC对象类型,如intstructenu

    OC数组不能存放nil

    1.NSArray数组

    1.NSAarry的创建 不可变数组

    1》.  NSArray *array1 = [NSArray array]; // 由于是不可变数组,永远都是空数组
    2》.  NSArray *array2 = [NSArray arrayWithObject:@"whblap"];
    3》.  NSArray *array3 = [NSArray arrayWithObjects:@"whb",@"lap",nil]; //nil是数组元素        结束的标记
         [array3 count]; // 计算数组元素个数
         [array3 objectAtIndex:1]; // 可取到第二个元素 lap  == array3[0];
    
    4》.  快速创建数组对象     推荐使用,提高编码效率
         NSArray *array4 = @[@"whb",@"lap"];    // @ 是OC特有的关键字,代表创建一个对象 此处为创建一个OC数组对象  并且@只能创建不可变数组NSArray

    2.数组遍历

    1. 普通遍历:
    NSArray *array = @[@"whb",@"lap"];
    
    for(int i= 0;i<array.count;i++){
        NSLog(@"%@",array[i]);
    }
    2. 快速遍历:
    NSArray *array = @[@"whb",@"lap"];
    
    for (id obj in array)  // obj 代表着数组中的每一个元素
    {                   
    NSUInteger i = [array indexOfObject:obj]; // 找出obj元素在数组中的位置
        NSLog(@"%ld ---- %@",i, obj);
    }
    3. block遍历:
    [array enumerateObjectsUsingBlock:           //每拿到一个元素的时候就会调用一次block
    
      ^(id obj, NSUInteger idx,BOOL *stop)      // obj是对应里面的元素 idx是对应的元素下标(即索引) 并且当前元素和索引位置当做参数传给block
     {
         NSLog(@"%ld --- %@",idx,obj);
     }];

    3.NSMutableArray 可变数组

     

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"whb",@"lap",nil];
    //添加元素
    [array addObject:@"hello"];
    // 删除所有元素
    [array removeAllObjects];
    // 删除指定的对象
    [array removeObject:@"hello"];
    [array removeObjectAtIndex:1];
    // 打印数组
    NSLog(@"%@",array);

     

    2.NSSet集合

    1.NSSetNSArray的对比

    1> 共同点

    * 都是集合,都能存放多个OC对象

    * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:intcharfloat等,结构体,枚举)

    * 本身都不可变,都有一个可变的子类

     

    2> 不同点

    * NSArray有顺序,NSSet没有顺序

    2.NSMutableSet 可变集合

    NSMutableSet *set = [NSMutableSet set]; // 空的集合对象
    [set addObject:@"whb"];   // 添加某个元素个数
    [set removeObject:@"whb"];   // 删除某个元素
    NSString *str = [set anyObject];  // 随机取出某个元素
    NSLog(@"打印随机取的元素 %@",str); 

     

    3. NSDictionary字典

     1.NSDictionary字典  不可变字典

    字典特点: 

    • key ----> value        索引 ----> 文字内容
    • 里面存储的东西都是键值对
    • 字典不允许有相同的key,但允许有相同的valueObject
    • 字典是无序的

     

      2.NSDictionary的创建

    1》.NSDictionary *dict = [NSDictionary dictionaryWithObject:@"whb",forKey:@"name"];
    // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    
    2》.NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"whb", @"name",
                          @"福建", @"address",
                          @"841657484", @"qq", nil];  // 这种一般不写,可用Xcode编译器特性,下面一段代码代替
    
    3》. NSDictionary *dict = @[@"name" : @"whb",@"address" : @"福建",@"qq" : @"841657484"];   // 推荐使用

     利用key 查找对应的值

    1》. id obj = [dict objectforKey:@"name"];  // 不推荐使用
    
    2》. id obj = @[@"name"];     // 推荐使用   这行代码会自动转成上面那段代码
    
    // 返回的是键值对的个数
    NSLog(@"%ld", dict.count);

     


     

    2.NSMutableDictionary 可变数组

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    //添加键值对 [dict setObject:@"value" forKey:@"Key"];
    // 移除键值对 [dict removeObjectForKey:@"Key"]; 

     

    3.字典的遍历

    1. 普通遍历

    NSArray *keys = [dict allKeys];
    
    for(int i = 0;i<dict.count;i++)
    {
        NSString *key =  keys[i]; // 取到每一个key
        NSString *object = dict[key]; //根据key 查找对应的object
        NSLog(@"%@ = %@", key, object);
    }

     

    集合小结: 

    和java对比:

    NSArray ==== ArrayList

    NSSet ==== HashSet

    NSDictionary ==== HashMap

     

    1.NSArrayNSMutableArray

    * 有序

    * 快速创建(不可变):@[obj1, obj2, obj3]

    * 快速访问元素:数组名[i]

     

    2.NSSetNSMutableSet

    * 无序

     

    3.NSDictionaryNSMutableDictionary

    * 无序

    * 快速创建(不可变):@{key1 : value1, key2 : value2}

    * 快速访问元素:字典名[key]

     

    综合应用,LOOK下面代码:

    NSArray *persons = @[
                         @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
                         @{@"name" : @"rose", @"qq" : @"767567"},
                         @{@"name" : @"jim", @"qq" : @"423423"},
                         @{@"name" : @"jake", @"qq" : @"123123213"}
                         ];
    
    // NSDictionary *jim = persons[2];
    NSString *bookName = persons[0][@"books"][1];
    NSLog(@"%@", bookName);
    //NSArray *array = persons[0][@"books"];
    //NSLog(@"%@", array);
    // 先取出1位置对应的字典
    // 再取出字典中qq这个key对应的数据
    //NSLog(@"%@", persons[1][@"qq"]);
    // NSLog(@"%@", jim);
  • 相关阅读:
    Nuget常用命令(转)
    Core使用SAP Web Service
    jquery.dataTables动态列--转
    jqGrid随窗口大小变化自适应大小-转
    30个值得推荐的数据可视化工具--转
    Automapper问题记录
    MVC及MVC Core在filter中如何获取控制器名称和Action名称
    .Net Core使用 MiniProfiler 进行性能分析(转)
    Core中使用Hangfire
    ASP.NET 多环境下配置文件web.config的灵活配置---转
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3728980.html
Copyright © 2011-2022 走看看