OC字典:1-NSDictionary类
字典是由键-值(key-value)组成的数据集合,其中值value为对象。可以通过键key从字典中获取需要的value值。字典中的键key必须唯一,通常情况下,键key为字符串对象,主要用于注明存储对象的说明,但键key也可以是其他类型的对象。和键key关联的值value可以是任何对象类型,但不能是nil。
创建不可变字典
在Foundation框架中,提供了NSDictionary类,该类中定义了与字典操作相关的属性以及方法。NSDictionary类是不可变字典,即字典创建完成后,不能再新增/删除键值对。当我们需要创建一个不可变字典时,通常有如下几种方法。
- 不可变字典快速创建方法,格式如下:
@{
key1:value,
key2:value,
...
};
例如我们创建一个NSDictionary类的对象,其中存储4个键值对,这4个键值对的key都使用字符串对象,用来说明键值的含义,而value中可以保存各种类型的对象,可以是NSString字符串对象,也可以是NSNumber数字对象。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//快速方式创建字典
NSDictionary *dict = @{
@"website":@"www.99ios.com",
@"name":@"99学院",
@"business":@"iOS学习",
@"foundedYear":@2016
};
}
return 0;
}
- 调用dictionaryWithObjectsAndKeys类方法,使用该方法创建字典时,注意顺序是:value, key,并且要以nil结尾。如下创建的字典中,包含了两对键值对,其键key分别为website以及name。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//注意是:value,key的顺序
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"www.99ios.com",
@"website",
@"99学院",
@"name",
nil];
}
return 0;
}
- 使用键数组和值数组创建字典。把字典中的key以及value,按照对应顺序,分别放在一个数组中,然后调用dictionaryWithObjects: forKeys:方法,创建字典。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建多组键值对的字典
NSArray *keys = @[@"website",@"name"];
NSArray *values = @[@"www.99ios.com",@"99学院"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
}
return 0;
}
注意:key通常为NSString类型,但也可以为其他类型,如下创建的字典中,键key为一个NSNumber类的对象,这在语法上是允许的,但实际开发中一般不这样使用。
//创建非NSString类型的key
NSDictionary *dict = @{
@2016:@"2016"
};
访问字典的键值
字典最常用的操作就是根据键key来获取对应的值value。通常情况下,有如下两种方式来取值。
使用dict[key]的形式
使用objectForKey方法
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSDictionary *dict = @{
@"website":@"www.99ios.com",
@"name":@"九九学院",
@"business":@"iOS学习",
@"foundedYear":@2016
};
NSString *website = dict[@"website"];
NSLog(@"字典中website对应的value: %@",website);
NSString *name = [dict objectForKey:@"name"];
NSLog(@"字典中name对应的value: %@",name);
}
return 0;
}
运行结果:
遍历字典中的键值对
在Objective-C中提供了forin循环,forin循环除了能够用于遍历数组中的对象之外,也可以用于遍历字典中的键值对。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//快速方式创建字典
NSDictionary *dict = @{
@"website":@"www.99ios.com",
@"name":@"九九学院",
@"business":@"iOS学习",
@"foundedYear":@2016
};
//枚举字典
for (NSDictionary *key in dict) {
NSLog(@"key:%@ value: %@",key, dict[key]);
}
}
return 0;
}
运行结果如下。通过打印的顺序我们可以验证,在字典中存储的键值对是无序存放的,这个是字典与数组这两个数据存储结构的重要区别。
其他操作
对于字典的操作,除了上面介绍的字典创建以及键值对的取值之外,还有如下几个在NSDictionary类中定义的属性或方法相对常用。
- 获取字典中键值对的数量
@property (readonly) NSUInteger count;
- 获取一个字典中所有的键key,返回一个数组
@property (readonly, copy) NSArray<KeyType> *allKeys;
- 获取一个字典中所有的值value,返回一个数组
@property (readonly, copy) NSArray<ObjectType> *allValues;
示例代码
https://github.com/99ios/4.4.1
最后编辑时间为: August 27th , 2017 at 09:49 am
本文由 99ios 创作,转载请注明出处