Objective-C语言——NSDictionary不可变字典

本文详细介绍了Objective-C中的字典概念,包括NSDictionary和NSMutableDictionary的使用方法。解释了字典的基本概念,初始化方式,以及如何访问和遍历字典中的元素。

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



#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        /*
         字典  NSDictionary / 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 *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];
        
        //字典里面存放的元素都要是对象类型才行。如果是基本数据类型,要先把这些基本数据类型进行封装,然后在放到这些集合里。
        
        //value在前,key 在后,value 和 key 要成双出现
        NSLog(@"dictionary4 = %@",dictionary4);
        //注意:在字典中键值是无序的
        
        //根据一个字典创建一个字典
        NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
        NSLog(@"dictionary5 = %@",dictionary5);
        
        //新语法创建字典
        NSDictionary *dictionary6 = @{};
        //新语法创建一个键值对
        NSDictionary *dictionary7 = @{@"name":@"Rick"};
        //新语法创建多个键值对
        NSDictionary *dictionary8 = @{@"name":@"Rick",@"age":@25,@"address":@"GZ"};
        
        NSLog(@"dictionary8 = %@",dictionary8);
        
      //从本地读取字典
        NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@""];
        
        //从网络读取字典
        NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
        
        //字典中键值对的数量
        NSUInteger count = dictionary4.count;
//        NSLog(@"count = %lu",count);
        
        //如何访问字典
        //通过key访问字典中对应的值
        NSString *name = [dictionary4 objectForKey:@"name"];
        NSLog(@"name = %@",name);
        
        //新语法
        NSString *newName = dictionary4[@"name"];
        NSLog(@"newName = %@",newName);
        
        //如何遍历字典中所有的值
        //表示字典中所有的key
        NSArray *keysArray = dictionary4.allKeys;
        NSLog(@"keysArray = %@",keysArray);
        
        //字典中所有的value
        NSArray *valuesArray = dictionary4.allValues;
        NSLog(@"valuesArray = %@",valuesArray);
        
        //使用for循环来打印
        for (int i = 0; i < valuesArray.count; i++) {
//            NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
//            NSLog(@"%@ = %@",keysArray[i],[dictionary4 objectForKey:keysArray[i]]);
            NSLog(@"%@ = %@",keysArray[i],dictionary4[keysArray[i]]);
        }
        
        //使用快速枚举
        for (NSString *key in keysArray)
        {
//            NSLog(@"%@ = %@",key,[dictionary4 objectForKey:key]);
            NSLog(@"%@ = %@",key,dictionary4[key]);
        }
        
        //使用枚举器遍历
        NSEnumerator *enumerator = [keysArray 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",@"Jack",@"name", nil];
        
        NSLog(@"------------------");
        for (NSString *key in [dictionary allKeys])
        {
            NSLog(@"%@ = %@",key,dictionary[key]);
        }
        
        
        
    }
    return 0;
}



运行结果


2015-12-16 09:51:45.148 OC_06_01[7024:252081] dictionary4 = {

    address = GZ;

    age = 25;

    name = Rick;

}

2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary5 = {

    address = GZ;

    age = 25;

    name = Rick;

}

2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary8 = {

    address = GZ;

    age = 25;

    name = Rick;

}

2015-12-16 09:51:45.256 OC_06_01[7024:252081] name = Rick

2015-12-16 09:51:45.257 OC_06_01[7024:252081] newName = Rick

2015-12-16 09:51:45.257 OC_06_01[7024:252081] keysArray = (

    name,

    age,

    address

)

2015-12-16 09:51:45.258 OC_06_01[7024:252081] valuesArray = (

    Rick,

    25,

    GZ

)

2015-12-16 09:51:45.258 OC_06_01[7024:252081] name = Rick

2015-12-16 09:51:45.258 OC_06_01[7024:252081] age = 25

2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ

2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick

2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25

2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ

2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick

2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25

2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ

2015-12-16 09:51:45.260 OC_06_01[7024:252081] ------------------

2015-12-16 09:51:45.260 OC_06_01[7024:252081] age = 25

2015-12-16 09:51:45.260 OC_06_01[7024:252081] name = Rick

2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ

Program ended with exit code: 0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值