zoukankan      html  css  js  c++  java
  • 学习iOS【3】数组、词典和集合

    一、数组

    1.不可变数组NSArray

    • arrayWithObjects:使用一组对象作为元素创建不可变数组,注意数组的最后一个值需要指定为nil,用来表示参数的结束,但是nil并不会存储在数组中。
    • objectAtIndex:获取指定索引位置的数组元素。
    • @[elm1,elm2….elmn]:另外一种创建数组的简便方式,不需要以nil作为结尾元素;
    • array[index]:另外一种获取指定索引位置元素的方式。
    • count:数组中元素个数。
     
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            /*不可变数组*/
            //创建不可变数组 方式一
            NSArray *arr=[NSArray arrayWithObjects:@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日",nil];
            for(int i=0;i<[arr count];i++){
                NSLog(@"%@",[arr objectAtIndex:i]);
            }
            //创建不可变数组 方式二
            NSArray *arr1=@[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日"];
            for(int i=0;i<[arr1 count];i++){
                NSLog(@"%@",arr1[i]);
            }
        }
    }

    2.可变数组NSMutableArray

    • NSMutableArray array方法创建空的可变数组,数组元素个数未定,可以随着需要增长;
    • addObject:向可变数组结尾添加元素;
    • insertObject:obj atIndex:i :将对象obj插入数组的第i个元素。
    • removeObjectAtIndex:i  删除数组中第i个元素。
    • replaceObjectAtIndex:i withObject:obj 将数组中序号为i的对象用obj替换。
    • 使用NSLog格式化%@可以显示整个数组,它实际上会调用每个元素的description方法。
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            /*可变数组*/
            NSMutableArray *marr=[NSMutableArray array];
            for (int i=0; i<3; i++) {
                marr[i]=@(i+1);
            }
            [marr addObject:@(4)];
            for (int i=0; i<[marr count]; i++) {
                NSLog(@"%@",marr[i]);
            }
            NSLog(@"%@",marr);
         }
    }

    二、词典对象(dictionary)

    词典也有两种类型:不可变词典NSDictionary和可变词典NSMutableDictionary。

    1.不可变词典NSDictionary

    • NSDictionary dictionaryWithObjectsAndKeys:创建不可变词典,参数是值-键对组合(注意顺序),以nil结尾。
    • allKeys:返回一个数组包含词典中的所有键;
    • count:返回词典中的记录数;
    • objectForKey:返回key的值对象。
     
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            /*不可变词典*/
            NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"学生",@"1",@"教师",@"2", nil];
            for (NSString *key in dic) {
                NSLog(@"key:%@ value:%@",key,[dic objectForKey:key]);
            }
         }
    }

    2.可变词典NSMutableDictionary

    • NSMutableDictionary dictionary:创建一个可变词典;
    • setObject:forKey:把键值对添加到可变词典中;
    • removeAllObjects:删除词典中所有的记录;
    • removeObjectForKey:删除词典中的指定键key对应的记录;
     
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            /*可变词典*/
            //创建可变词典对象
            NSMutableDictionary *mdic=[NSMutableDictionary dictionary];
            //添加键值对
            [mdic setObject:@"学生" forKey:@"1"];
            mdic[@"2"]=@"教师";
            //显示键值对
            NSLog(@"key:1 value is:%@",[mdic objectForKey:@"1"]);//key:1 value is:学生
            NSLog(@"key:2 value is:%@",mdic[@"2"]);//key:2 value is:教师
            //删除
            [mdic removeObjectForKey:@"1"];
            NSLog(@"mdic count:%lu",[mdic count]);//mdic count:1
            [mdic removeAllObjects];
            NSLog(@"mdic count:%lu",[mdic count]);//mdic count:0
         }
    }

    三、集合对象(set)

    set是一组单值对象集合。

    1.NSSet 不可变词典

    • setWithObjects:以一个nil为结尾的对象数组创建一个集合。
    • containObject:检测某个对象是否包含在集合中。
    • count:集合成员个数。
     

    2.NSMutableSet 可变词典

    • addObject:向集合中添加对象;
    • removeObject:从集合中删除对象;
    • removeAllObjects:删除集合中所有对象;
    • unionSet:求两个集合的并集;
    • intersectSet:求两个集合的交集
     

    3.实例

    首先我们自定义分类为NSSet添加自定义方法print。
    NSSet+Printing.h
    #import <Foundation/Foundation.h>
    
    @interface NSSet (Printing)
    -(void)print;
    @end
    NSSet+Printing.m
    #import "NSSet+Printing.h"
    
    @implementation NSSet (Printing)
    -(void)print{
        NSLog(@"------");
        for(NSNumber *item in self){
            NSLog(@"%li",(long)[item integerValue]);
        }
    }
    @end
    main.m
    #import <Foundation/Foundation.h>
    #import "NSSet+Printing.h"
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            //创建不可变集合
            NSSet *set=[NSSet setWithObjects:@"1",@"3",@"5", @"7",nil];
            //创建可变集合
            NSMutableSet *mset=[NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
            //输出
            [set print];
            [mset print];
            //成员测试
            if([set containsObject:@"7"]==YES){
                NSLog(@"set contain 7");
            }else{
                NSLog(@"set does not contain 7");
            }
            //添加对象
            [mset addObject:@"6"];
            [mset print];
            //移除对象
            [mset removeObject:@"6"];
            //求并集
            [mset unionSet:set];
            [mset print];
            [mset print];
            //求交集
            [mset intersectSet:set];
            [mset print];
         }
    }
     
  • 相关阅读:
    【剑指offer】复杂链表的复制
    【剑指offer】数组中只出现一次的数
    【剑指offer】数组在排序数组中出现的次数
    【剑指offer】数组中重复的数字
    【剑指offer】两个链表的第一个公共结点
    【剑指offer】1+….+n,不能使用相关关键字
    【剑指offer】连续子数组的最大和
    JS全国城市三级联动
    ES6语法
    前端es6基础语法
  • 原文地址:https://www.cnblogs.com/janes/p/5467317.html
Copyright © 2011-2022 走看看