Foundation——集合

NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作。数组中可以存储不同类型的对象。数组实际上存储的时对象的地址,同样也可以存储数组的地址。以nil作为数组结尾。


              1.创建集合

            NSArray * array2 = [[NSArray alloc]

initWithObjects:@"one",@"two"nil]; //先创建再初始化

            NSArray * array1 = [NSArray arrayWithObjects:@"one",@"two",@"three"nil];//创建并初始化

            NSArray * karray = @[@"a",@"b",@"c];//快捷方式

     

            //8.获得一个数组中的元素

            NSString * kstr = karray[0];//快捷方式

            NSString * str = [array objectAtIndex:0];//普通方式

 

            //10.获得数组的元素个数

            NSUInteger arrayCount = [array count];


            判断数组中是否存在某个对象

            BOOL isContain = [array containsObject:p1];


----------------------遍历集合-----------------------

        //1.使用for循环遍历数组

        //2.使用增强for循环的方式遍历数组(集合中元素类型最好一样)

        for (NSString * str in array)

        {

            NSLog(@"str = %@",str);

        }

        //3.枚举器(迭代器)

        NSEnumerator * enumerateor =  [array3 objectEnumerator];

        NSString * value;

        while (value = [enumerateor nextObject]) {

            NSLog(@"enum str %@",value);

        }


----------------------集合排序-----------------------

                  未排序前按照你存入元素的顺序   

        //1.使用sortedArrayUsingSelector

        NSArray * array = @[@"b",@"d",@"a",@"z"];

        NSLog(@"排序前 array %@",array);

        array = [array sortedArrayUsingSelector:@selector(compare:)];//调用元素的compare()

        NSLog(@"排序后 array %@",array);

        

        //2.使用block方式排序

        NSArray * array2 = @[@"z",@"4",@"b",@"3",@"x"];

        NSLog(@"array2 排序前 %@",array2);

        array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            

            /*

            NSComparisonResult retuslt = [obj1 compare:obj2];

            return retuslt;

             */

            //obj1 compare obj2 就是正序排序       (原理没搞懂,好像和retuslt的结果没关系)

          return [obj1 compare:obj2];

            //obj2 compare obj1 就是倒序排序

            return [obj2 compare:obj1];

            

        }];

        NSLog(@"array2 排序后 %@",array2);

        

       

        Person * p1 = [[Person allocinitWithName:@"xiaozhe" andAge:20 andYear:@"1990"];

        Person * p2 = [[Person allocinitWithName:@"alex" andAge:18 andYear:@"2990"];

        Person * p3 = [[Person allocinitWithName:@"merry" andAge:25 andYear:@"1890"];

        

        NSArray * array3 = @[p1,p2,p3];

        NSLog(@"array3 排序前 %@",array3);

        

        //3.使用NSSortDescriptor给数组排序

        //如果你向给你自己定义的对象排序,必须根据某一个属性来排序,

        //sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入

        //ascending YES表示正序 NO表示倒叙

        NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

        NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];

        //如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高

        NSArray * descripts = @[d2,d1];

        array3 = [array3 sortedArrayUsingDescriptors:descripts];

        NSLog(@"array 3 排序后  %@",array3);  

        //4.指定属性的block

        NSArray * array4 = @[p1,p2,p3];

        NSLog(@"array4 排序前 %@",array4);

        array4 = [array4 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            

            Person * p1 = obj1;

            Person * p2 = obj2;

            

            //按照year排序

     NSComparisonResult retuslt = [p1.year compare:p2.year];

            

            return retuslt;

        }];

        NSLog(@"array4 排序后 %@",array4);





NSMutableArray 继承至 NSArray


        //1.创建可变数组

        NSMutableArray * array = [[NSMutableArray allocinitWithCapacity:0];

        

        //使用addObject 动态给数组中增加元素,(插入到末尾)

        /*

        [array addObject:@"one"];

        [array addObject:@"two"];

        [array addObject:@"three"];

        [array addObject:@"one"];

         */

        NSString * str1 = @"one";

        NSString * str2 = @"two";

        NSString * str3 = @"three";

        

        //数组中可以存储,同一个对象多次

        [array addObject:str1];

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

        

        //2.指定对象插入的位置

        [array insertObject:str1 atIndex:2];

        

        //3.删除 会通过对象,删除数组中所有的同一个地址的对象

        [array removeObject:str1];

        

        //4.通过索引的方式删除对象,超出了数组的count,那么就会导致异常 index beyond bounds

        [array removeObjectAtIndex:0];

        

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

        

        //5.删除数组中所有的元素

        [array removeAllObjects];

        

        

        NSLog(@"array %@",array);

        

        

        [array addObject:str2];

        [array addObject:str3];

        [array addObject:str1];

    ----------------------遍历集合-----------------------

        //1.for换遍历

        for (int i = 0; i < array.count; i++)

        {

            NSString * str = [array objectAtIndex:i];

            

            //在遍历数组的时候,千万不要给数组中,增加,或者删除元素

//            [array removeObject:str1];

            

            NSLog(@"str %@",str);

          

        }

        

        

        //2.增强for循环

        for (NSString * str in array)

        {

//            [array removeObject:str1];

            //如果你在增强for循环中,删除元素,会直接导致异常出现

            NSLog(@"str %@",str);

        }

        

        //3.枚举器

        

        NSEnumerator * enumerator = [array objectEnumerator];

        NSString * value;

        while (value = [enumerator nextObject]) {

            //如果你在枚举器中,删除元素,会直接导致异常出现

//            [array removeObject:str1];

            NSLog(@"str %@",value);

        }

        

        

        //4.要通过遍历的方式确定删除哪个元素怎么办

        

        NSMutableArray * array2 = [[NSMutableArray allocinit];

        [array2 addObject:@"1"];

        [array2 addObject:@"2"];

        [array2 addObject:@"3"];

        [array2 addObject:@"4"];

        [array2 addObject:@"5"];

        

        NSMutableArray * tmp = [[NSMutableArray allocinit];   //用临时数组来记录要删除的元素

        

        for (NSString * str in array2)

        {

            if ([str isEqualToString:@"3"])

            {

                [tmp addObject:str];

            }

        }

        

        NSLog(@"array2 %@",array2);

        NSLog(@"tmp %@",tmp);

        

        

        //遍历的是临时数组,删除的是array2

        for (int i = 0; i < tmp.count; i++)

        {

            NSString * str = [tmp objectAtIndex:i];

            

            //从原数组中删除,临时数组中存储的对象

            [array2 removeObject:str];

        }

        

        NSLog(@"array2 %@",array2);



NSDictionary  

        //1.创建字段,不可变的

        NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaozhe",@"name"nil];

        NSLog(@"dic %@",dic);

        

        //2.快捷创建方式

        NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};

        NSLog(@"dic2 %@",dic2);

        

        //3.字典中可以存任意数据类型

        // 字典的顺序不是自然顺序

        NSArray * array = @[@"one",@"two"];

        

        NSDictionary * dic3 = @{

                                @"one":@"1",

                                @"num":[NSNumber numberWithInt:10],

                                @"aaa":dic2,

                                @"bbb":dic,

                                @"ar1":array

                                

                                };

        

        NSLog(@"dic3 %@",dic3);

        

        //4.获得字典的长度

        NSLog(@"count %ld",dic3.count);

        

        //5.从字典中取值

        

        NSString * str  = [dic3 objectForKey:@"one"];

        NSLog(@"str %@",str);

        

        NSDictionary * dicTmp = [dic3 objectForKey:@"aaa"];

        NSLog(@"dicTmp %@",dicTmp);

        NSArray * arrayTmp = [dic3 objectForKey:@"ar1"];

        NSLog(@"arrayTmp %@",arrayTmp);

        

        //6.遍历

        //取出所有的key

        NSArray * allkeys = [dic3 allKeys];

        NSLog(@"allkeys %@",allkeys);

        

        for (int i = 0; i < allkeys.count; i++)

        {

            NSString * key = [allkeys objectAtIndex:i];

            

            //如果你的字典中存储的多种不同的类型,那么最好用id类型去接受它

            id obj  = [dic3 objectForKey:key];

            NSLog(@"obj %@",obj);

        }

    

        //2.枚举器

        

        NSEnumerator * enumerator =  [dic3 objectEnumerator];

        

        id value;

        while (value = [enumerator nextObject]) {

            NSLog(@"value %@",value);

        }




NSMutableDictionary  

        //1.创建一个可变长度字典

        NSMutableDictionary * muDic = [[NSMutableDictionary allocinitWithCapacity:0];

        //2.向字典中村如数据

        [muDic setObject:@"1" forKey:@"one"];

        [muDic setObject:@"2" forKey:@"two"];

        [muDic setObject:@"3" forKey:@"three"];

        

        NSLog(@"muDic %@",muDic);

        

        //3.删除

        [muDic removeObjectForKey:@"one"];

        

        NSLog(@"muDic %@",muDic);

        

        //4.全部删除

        [muDic removeAllObjects];

        

        NSLog(@"muDic %@",muDic);

        

        

        Student * stu1 = [[Student allocinitWithName:@"xiaoher" andAge:20];

        Student * stu2 = [[Student allocinitWithName:@"alex" andAge:50];

        Student * stu3 = [[Student allocinitWithName:@"xiaoli" andAge:10];

        

        [muDic setObject:stu1 forKey:@"s1"];

        [muDic setObject:stu2 forKey:@"s2"];

        [muDic setObject:stu3 forKey:@"s3"];

        //在向字典中存储数据的时候,一定要保证key值是唯一的

//        [muDic setObject:stu3 forKey:@"s3"];

//        [muDic setObject:stu3 forKey:@"s3"];

//        [muDic setObject:stu3 forKey:@"s3"];

    

        //1.使用for循环遍历字典

        NSArray * allkeys = [muDic allKeys];

        

        for (int i = 0; i < allkeys.count; i++)

        {

            NSString * key = [allkeys objectAtIndex:i];

            Student * stu = [muDic objectForKey:key];

            NSLog(@"stu %@",stu);

        };

        

        //2.使用枚举器

        

        NSEnumerator * enumerator = [muDic objectEnumerator];

        Student * tmp;

        while (tmp = [enumerator nextObject]) {

            NSLog(@"tmp %@",tmp);

        }





NSset  set集合


NSArray 自然顺序,NSSet是无序的。NSSet中不能够存储重复的数据,可以用它来去除重复的值

        NSString * str1 = @"one";

        NSString * str2 = @"two";

        NSString * str3 = @"three";

        NSSet * set = [[NSSet allocinitWithObjects:str1,str2,str3,str1, nil];

   

        //count

        NSLog(@"count %ld",set.count);

        //是否包含

       BOOL isContains =  [set containsObject:str1];

        //4.遍历

        NSEnumerator * enumerator = [set objectEnumerator];

        NSString * value;

        while (value = [enumerator nextObject]) {

            NSLog(@"value %@",value);

        }


NSMutableSet 可变set集合

        //1 创建一个可变集合

        NSMutableSet * muSet = [[NSMutableSet allocinit];

        

        //2.增加值

        [muSet addObject:str1];

        [muSet addObject:str2];

        //3.删除

        [muSet removeObject:str1];

        

        NSLog(@"muSet %@",muSet);

        

        //4.删除所有

//        [muSet removeAllObjects];

    

        NSLog(@"muSet %@",muSet);

        

        //5.遍历

        NSEnumerator * en = [muSet objectEnumerator];

        NSString * value;

        while (value = [en nextObject]) {

            NSLog(@"value %@",value);

        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值