OC学习:OC字典NSDictionary

本文详细介绍了Objective-C中字典的使用方法,包括初始化、内存管理机制、键值对数量查询、键值对访问及遍历等核心内容,并探讨了字典内部存储原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
         字典的有关键字key和关键字所对应value构成的集合,key和value都是存放对象,在大量的数据或频繁的信息查找时,字典的效率比数组要高。字典采用键查询的优化存储方式,用匹配的key来找到对应的value值,因此在字典中不能出现相同的key。
         不可变字典NSDictionary是可变字典NSMutableDictionary的父类。
         在字典中键值对是无序的
         */
        //初始化一对value和key
        NSDictionary *dictionary1 = [NSDictionary dictionaryWithObject:@"这是value" forKey:@"这是key"];
        
        //初始化多对@value,@key键值对(创建时要成对出现,key和value不能换)
        NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
        NSDictionary *dictionary20 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
        //用字典创建字典
        NSDictionary *dictionary21 = [NSDictionary dictionaryWithDictionary:dictionary2];
        
        //对字典内存基理的探索
        if (dictionary2 == dictionary20){
            NSLog(@"2-20 xiangtong");
        }
        if (dictionary2 == dictionary21){
            NSLog(@"2-21 xiangtong");
        }
        //上面2句if条件语句无输出操作,则说明他们的三个字典对象的指针是不相同的, 有着自己的内存。
        //但是下面两个if条件都执行了NSLog代码,且在遍历字典时输出的结果与输入时是不一致的,因此我们可以想到字典中vaule的存放是无序,那么说明字典中的value存放的方法是一样的,由于一样的存放方法找到了一样的内存空间,值若存在,返回地址,若不存在则创建。
        if (dictionary2[@"key1"]==dictionary20[@"key1"]) {
            NSLog(@"2.1-20.1 xiangtong");
        }
        if (dictionary21[@"key1"]==dictionary20[@"key1"]) {
            NSLog(@"21.1-20.1 xiangtong");
        }
        //以下if语句进行了输出操作。
        NSString *string = @"value1";
        if (dictionary21[@"key1"]==string) {
            NSLog(@"21.1-string xiangtong");
        }
        //OC中的内存管理机制大概也就被我们发现了,在集合NSSet中我们也会发现同样的情况,因此在OC中我们能否修改对象的值的?
        
        //用数组创建字典
        NSArray *arrayKey = @[@"key1",@"key2",@"key3"];
        NSArray *arrayValue = @[@"value1",@"value2",@"value3"];
        NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjects:arrayValue forKeys:arrayKey];
        
         //新语法创建字典
        NSDictionary *dictionary5 = @{};
        NSDictionary *dictionary6 = @{@"key1":@"value1",@"key2":@"value2"};
        
        // 求字典中键值对的数量
        NSInteger count = dictionary2.count;
        
        //访问字典的value
        NSString  * KeyForValue1 = [dictionary2 objectForKey:@"key1"];
        
        //新语法在不可变字典中是可行的,但是在可变字典中不可行
        NSString * keyForValue2 = dictionary2[@"key2"];
        
        //访问字典中所有的key
        NSArray *allKeys = [dictionary2 allKeys];
        
        //访问字典中所有的value
        NSArray *allValues = [dictionary2 allValues];
        
        //遍历字典,从其输出的结果可以看出来字典存放的键值是无序的。根输入时的顺序不同。
        //而且在遍历可变字典的时候可以进行删除字典的操作。
        for ( NSString *obj in allKeys) {
            NSLog(@"%@,%@",obj,dictionary2[obj]);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值