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];
         }
    }
     
  • 相关阅读:
    C# 中 Struct 与 Class 的区别,以及两者的适用场合<转转转>
    <转>.NET Framework十年回顾 体积越小功能越强
    一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素
    在博客园已经一年多时间了,今天开通博客了!
    C#RSA非对称加解密
    无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
    JavaScript判断浏览器类型及版本(转)
    SQL Server 海量导入数据
    数据库管理方面必知语句(问答)(转)
    JS实现的购物车
  • 原文地址:https://www.cnblogs.com/janes/p/5467317.html
Copyright © 2011-2022 走看看