您当前的位置:首页 > 计算机 > 编程开发 > Objective-C

OC之字典NSDictionary

时间:05-12来源:作者:点击数:

NSDictionary,去掉Foundation框架的标示“NS”,翻译过来就是“字典”。这是和C语言中的任何数据类型都不一样的Foundation框架提供的一个类。它也是存储数据的一种类型。

它的使用方法和现实生活中的字典类似。例如要用字典查一个字,首先会通过这个字的拼音或者偏旁去查这个字在字典的那一页上,然后就可以在字典上找到要查的字了。

OC中的字典也是这么用,它里边的数据是通过键值对的形式保存的,简单的理解,键就是使用的字典上的拼音或者偏旁,而值就是要找的那个字。键和值组成一对,唯一的键只能查找出唯一的值,而每一个值可能有多个键(一个字可以用拼音查到,也可以用偏旁查找),他们是多对一的关系,这就是键值对的含义。

注意:使用键值对要求键和值都必须是对象,也就是说C语言的基本数据类型是不能当键和值的(必须要把他们转化成对象才能用,后面会介绍具体的转化思路和代码),一般用OC中的NSString字符串当作键。

理解了键值对的含义之后,下面就可以运用键值对来创建自己的字典了。

创建NSDictionary对象

+(instancetype)dictionaryWithObject:(ObjectType)object forKey:(KeyType <NSCopying>)key;//向字典中存储一个键值对
+(instancetype)dictionaryWithObjects:(NSArray<ObjectType> *)objects forKeys:(NSArray<KeyType <NSCopying>> *)keys;//向字典中存储多个键值对
+(instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...
- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...

上面共列举了四个初始化字典对象的方法。第一个方法只能初始化一个键值对。后面三种方法能存储多个键值对。例子:

#import <Foundation/Foundation.h>
int main() {
    NSDictionary * dic1=[NSDictionary dictionaryWithObject:@"object1" forKey:@"key1"];
    NSLog(@"dic1 has :%@",dic1);
   
    NSDictionary * dic2=[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"object1",@"object2",@"object3", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]];
    NSLog(@"dic2 has :%@",dic2);
   
    NSDictionary * dic3=[NSDictionary dictionaryWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2",@"object3",@"key3", nil];
    NSLog(@"dic3 has :%@",dic3);
   
    NSDictionary * dic4=[[NSDictionary alloc] initWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2",@"object3",@"key3", nil];
    NSLog(@"dic4 has :%@",dic4);
    return 0;
}

输出结果:

dic1 has :{
    key1 = object1;
}
dic2 has :{
    key1 = object1;
    key2 = object2;
    key3 = object3;
}
dic3 has :{
    key1 = object1;
    key2 = object2;
    key3 = object3;
}
dic4 has :{
    key1 = object1;
    key2 = object2;
    key3 = object3;
}

字典的常用方法

1、提供了count属性和count方法,可以用来获取字典对象中键值对的数量(和NSArray中count的用法相同,不再举例)。

2、比较两个字典是否相等:

- (BOOL)isEqualToDictionary:(NSDictionary<KeyType, ObjectType> *)otherDictionary;

例子:

#import <Foundation/Foundation.h>
int main() {
NSDictionary * dic2=[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"object1",@"object2",@"object3", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]];
 
    NSDictionary * dic3=[NSDictionary dictionaryWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2",@"object3",@"key3", nil];
 
    int i=[dic2 isEqualToDictionary:dic3];
    NSLog(@"%d",i);
    return 0;
}

输出结果:1

3、从字典中根据键找出对应的值;

#import <Foundation/Foundation.h>
 
int main() {
    NSDictionary * dic2=[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"object1",@"object2",@"object3", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]];
    NSString * str=[dic2 objectForKey:@"key1"];
    NSLog(@"%@",str);
    return 0;
}

输出结果:object1

4、NSDictionary还提供了allKeys和allValues两个属性,可以通过点语法调用这两个属性来获取字典中的所有键和所有值。这两个属性返回的都是一个数组,所以需要用数组去获取。

例子:

#import <Foundation/Foundation.h>
int main() {
    NSDictionary * dic2=[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"object1",@"object2",@"object3", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]];
    NSArray * keys=dic2.allKeys;
    NSArray * objects=dic2.allValues;
   
    NSLog(@"all keys are :%@",keys);
    NSLog(@"all values are :%@",objects);
    return 0;
}

输出结果为:

all keys are :(
    key1,
    key3,
    key2
) all values are :(
    object1,
    object3,
    object2
)

NSMutableDictionary的使用

NSDictionary也有可变的类型:NSMutableDictionary。用可变字典可以随意添加、删除或者修改键值对。

1、向可变字典中添加键值对

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

例子:

#import <Foundation/Foundation.h>
int main() {
    NSMutableDictionary * dic=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2", nil];
    [dic setObject:@"object3" forKey:@"key3"];
    NSLog(@"%@",dic);
    return 0;
}

输出结果:

{
       key1 = object1;
       key2 = object2;
       key3 = object3;
}

2、删除可变字典中的键值对

- (void)removeObjectForKey:(KeyType)aKey;

例子:

#import <Foundation/Foundation.h>
 
int main() {
    NSMutableDictionary * dic=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"object1",@"key1",@"object2",@"key2", nil];
    [dic removeObjectForKey:@"key1"];
    NSLog(@"%@",dic);
    return 0;
}

输出结果:

{
    key2 = object2;
}

除了上边给大家解释的常用方法,NSDictionary和NSMutableDictionary类中加油一些方法,大家在编写代码的过程中可以进入类中自己练习。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:OC之NSArray 下一篇:OC之NSDate
推荐内容
相关内容
栏目更新
栏目热门