Objective-c语言_不可变字典


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

     //字典

    /*

     字典 NSDictionnary//NSMutableDictionary

     1.概念:字典是关键字:‘key’及其定义的值'value'构成的集合,及其它是由key-value组成的键值对的集合,

     通常来讲,'key'一般式'NSString'类型的,‘value’OC中任意对象。对于字典来讲,我们就是通过key来访问value

     2.为什么有了数组后,还要字典呢?在由大量的数据或者频繁查询信息,使用字典效率更高,因为字典是 采用键查询

     的优化存储方法的。

     3.OC中我们使用'NSDictionary''NSMutableDictionary'来表示字典。其中‘NSMutableDictionary’

     ‘NSDictionary’的子类

     

     */

     //初始化

    //创建一个空的字典

        NSDictionary *dictionary1=[[NSDictionary alloc] init];

        

        NSDictionary *dictionary2=[NSDictionary dictionary];//自己的初始化方法

        

        //创建一个键值对的字典

    //创建有一个键值对的字典

        NSDictionary *dictionary3=[NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];

        //NSDictionary *dictionary3=[NSDictionary dictionaryWithObjects:@"Rick" forKeys:@"name"];这是错误的多了个s

        //创建多个键值对的字典

        //值在前名在后

        NSDictionary *dictionary4=[NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];//输入多个键值对,@25删除25没有报错但不要这样写

        //字典里存放的元素都要是对象类型才行,如果是基本数据类型,要先把这些基本数据类型,进行封装,然后

        //放到这些数组里面

        

        //value再去,key在后,valuekey要成双出现比如dictionary4

        NSLog(@"dictionary4=%@",dictionary4);//输出是无序的

        //注意在字典键值是无序的

        

        //根据一个字典创建一个字典

        NSDictionary *dictionary5=[NSDictionary dictionaryWithDictionary:dictionary4];//放字典

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

        

        if (dictionary5 == dictionary4)

        {

            NSLog(@"aaa");//不输出

        }

        

        NSString *string=@"aaaa";

        NSString *string2=[NSString stringWithString:string];

        if (string==string2)

        {

            NSLog(@"bbb");//浅拷贝执行

        }

        

        //创建键值对用@{}数组用@[]

        //新语法创建字典

        NSDictionary *dictionary6=@{};

        //新语法创建一个键值对

        NSDictionary *dictionary7=@{@"name":@"Rice"};

        //创建多个键值对

        NSDictionary *dictionary8=@{@"name":@"Rick",@"age":@25,@"address":@"GZ"};

        

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

        

        

        //从本地读取字典

        NSDictionary *dictionary9=[NSDictionary dictionaryWithContentsOfFile:@""];

        //网络读取字典

        NSDictionary *dictionary10=[NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]];

        //字典中键值对的数量

        NSUInteger count=dictionary4.count;

        NSLog(@"%lu",count);

        //如何访问我们的字典

        //通过key访问字典中对应的值

        NSString *name=[dictionary4 objectForKey:@"name"];

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

        //等价于

        //新语法

        NSString *newName=dictionary4[@"name"];

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

        

        //如何遍历字典中所有得值

        //表示字典中所有的key

        NSArray *keyArray= dictionary4.allKeys;

        //点语法的本质是setget

        

        //字典中所有的value

        NSArray *valuesArray = dictionary4.allValues;

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

        

        //使用for循环输出

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

        {

            NSLog(@"%@=%@",keyArray[i],valuesArray[i]);

            NSLog(@"%@=%@",keyArray[i],[dictionary4 objectForKey:keyArray[i]]);

            NSLog(@"%@=%@",keyArray[i],dictionary4[keyArray[i]]);//是用新语法

        }

        //使用快速枚举

        for(NSString *key in keyArray)

        {

            NSLog(@"%@=%@",key,[dictionary4 objectForKey:key]);

            //keyArray里面的值赋值给key

            //等价于

            NSLog(@"%@=%@",key,dictionary4[key]);

        }

        //使用枚举器遍历

        NSEnumerator *enumerator=[keyArray objectEnumerator];

        NSString *key;

        while (key=[enumerator nextObject])

        {

            NSLog(@"%@=%@",key,dictionary4[key]);

        }

        

        //在不可变字典中不能存储相同的key,如果相同的key则只会第一个key对应的value

        NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];

        NSLog(@"--------------------");

        for (NSString *key in [dictionary allKeys])

        {

            NSLog(@"%@=%@",key,dictionary[key]);

        }

        

        

        

    }

    return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值