OC - 第五章 集合 ( 数组、字典、集合 )

//              第五章集合 ( 数组、字典、集合 )

// OC中存储数据的容器类叫做集合(Collection):包括三个类{ 数组 字典 集合(NSSet)

// 可变可以增加和删除里面的对象,不可变不行,一般情况下用可变
// 可变继承不可变 不可变有字面量
// 均可用Arr/dictionary/set.count 字典为key个数
// 都可以直接打印

//    一、数组:

//   不可变数组:NSArray
//      数组的定义:
        NSArray *arr2 = [[NSArray alloc]init];
        NSArray *arr = [[NSArray alloc]initWithObjects:@"re", @"tr", @"yr", nil];//nil数组结束的标志
//      字面量定义:
        NSArray *arr1 = @[@"ios", @"Android", @"windows"];

        [arr1 containsObject:@"windows"];//判断数组是否包含某个对象
        NSInteger index = [arr1 indexOfObject:@"Android"];//获取元素下标
        id object = [arr1 objectAtIndex:2];//根据数组访问数组元素

//    可变数组:NSMutableArray

        NSMutableArray *arrQ = [[NSMutableArray alloc]initWithObjects:@"1", @"2", @"3", nil];
    NSMutableArray *arrT = [[NSMutableArray alloc]initWithArray:arrQ];

        [arrT addObject:@"Symbian"];//添加元素,添加到数组的最后
        [arrT insertObject:@"Symbian" atIndex:1];//插入元素
        [arrT removeObjectAtIndex:1];//删除元素
        [arrT replaceObjectAtIndex:1 withObject:@"3"];//替换

//    ********** 数组排序 **********
        NSArray *arr1 = @[@"30", @"17", @"1", @"13", @"7"];
        NSArray *arr2 = @[@(30), @(17), @(1), @(13), @(7)];
        //可变
        NSArray *sortArr = [arr2 sortedArrayUsingSelector:@selector(compare:)];//@selector(selector)方法选择器
        //不可变
        NSMutableArray *arr3 = [NSMutableArray arrayWithArray:arr1];
        [arr3 sortUsingSelector:@selector(compare:)];

//        方法的返回值是 NSComparisonResult, 参数是数组中元素的类型
//        若数组中的数据为类,那就在类的方法里面撰写compare
//        -(NSComparisonResult)compareHPWith:(类 *)boss;


//    二、字典:存储的数据叫做键值对(key-value)
//     原则:
//        1、字典中的数据是成对出现的
//        2、值(value)不能为空(nil),nil为结束符,value是对象类型
//        3、key不能重复(除了第一个之外其余无效),key一般是字符串

//    不可变字典:NSDictionary
//    (1)字典的定义:无序字典
        NSDictionary *dicNULL = [[NSDictionary alloc]init];
    NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"value",@"key", nil];//先值后键
//    字面量定义
        NSDictionary *dicA = @{@"key":@"value"};
        NSDictionary *dicB = [[NSDictionary alloc]initWithObjects:@[@"value数组"] forKeys:@[@"key数组"]];
//    (2)通过key访问值
        id value = [dic objectForKey:@"key"];
//    字面量访问
        id valueA = dic[@"key"];
//    (3)获取所有key、value
        NSArray *arrA = [dic allKeys];
        NSArray *arrB = [dic allValues];

//     可变字典:NSMutableDictionary
//    (1)字典的定义:
        NSMutableDictionary *dicC = [[NSMutableDictionary alloc]init];
        NSMutableDictionary *dicD = [[NSMutableDictionary alloc]initWithDictionary:dicA];//将不可变字典转成可变字典
        NSMutableDictionary *dicE = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"value",@"key", nil];

        [dicE setObject:@"value2" forKey:@"key2"];//添加键值对
        [dicE setObject:@"value" forKey:@"key2"];//修改键值对
        [dicE removeObjectForKey:@"key"];//删除键值对

//    三、集合
//        集合的定义:无序集合

//      不可变集合:NSSet
        NSSet *set = [[NSSet alloc]initWithObjects:@"id", nil];
        NSString *str = [set anyObject];//获得随机对象

//      可变集合:NSMutableSet
        NSMutableSet *mSet = [[NSMutableSet alloc]initWithObjects:@"散货", nil];
        [mSet addObject:@"或手机"];//添加元素
        [mSet removeObject:@"散货"];//删除元素
        [mSet containsObject:@"或手机"];//判断是否包含某个元素

//      记录元素及出现次数
        NSCountedSet *cSet = [[NSCountedSet alloc]initWithSet:mSet];
        NSCountedSet *cset = [[NSCountedSet alloc]initWithObjects:@"lol",@"lol", nil];
        NSLog(@"%@",cSet);

        NSInteger count = [cSet countForObject:@"a"];//Cset用
        NSLog(@"%ld",count);

//************ 集合(Collection)遍历、快速枚举: 字典遍历的是key值 ************

//        Collection :要遍历的集合的变量名 数组名 字典名 集合名
//        type *object :元素的类型 + 变量名
//        statements : 具体要实现的代码
//        for (type *object in collection) {
//            statements
//        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值