字典的基本概念
OC中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合.正如,我们在字典里查找单词的定义一样.
通过key(键),查找的对应的value(值),key通常是字符串对象,也可以是其他任意类型对象.在一个字典对象中,key的值必须是唯一的.
此外,字典对象的键和值不可以为空(nil),如果需要在字典中加入一个空值,可以加入NSNull对象
字典中存储方式是无序的,因为字典是没有下标的!!!
字典中存储方式是无序的,因为字典是没有下标的!!!
字典中存储方式是无序的,因为字典是没有下标的!!!
NSDictionary(字典)
字典的初始化
key不要重复,重复了只识别第一个
int main(int argc, const char * argv[]) {
@autoreleasepool {
//不可变字典
//只有一个键值对的字典初始化
//将整数1转化成NSNumber类型,用a存放
NSNumber *a = [NSNumber numberWithInt:1];
//定义一个只有一个键值对的字典b,value值是"xiaoming", key值是a(其实就是1)
NSDictionary *b = [NSDictionary dictionaryWithObject:@"xiaoming" forKey:a];
NSLog(@"%@", b);
//定义一个有多个键值对的字典
NSDictionary *c = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
NSLog(@"%@", c);
}
return 0;
}
获取字典键值对的个数
int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义一个有多个键值对的字典
NSDictionary *a = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
//使用[a count]获取字典键值对的个数
NSLog(@"%lu", (unsigned long)[a count]);
}
return 0;
}
根据字典里面的key 获取value
int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义一个有多个键值对的字典
NSDictionary *a = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
//根据字典a里面的key@"two", 获取它"two"所对应的value值
//使用 NSString 来接收!!!
NSString *b = [a objectForKey:@"two"];
NSLog(@"%@", b);
}
return 0;
}
拿到字典里面相同 value 的所有 key
int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义一个有多个键值对的字典
NSDictionary *a = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaoming", @"two", @"xiaoqiang", @"three", @"xiaoming", @"four", nil];
//拿到字典a里面所有valu是@"xiaoming"的key,新建一个数组b来存放
NSArray *b = [a allKeysForObject:@"xiaoming"];
NSLog(@"%@", b);
}
return 0;
}
NSMutableDictionary(可变字典)
可变字典的初始化 及 赋值
int main(int argc, const char * argv[]) {
@autoreleasepool {
//可变字典的初始化
//方法1)给可变字典a初始化了一个空间
NSMutableDictionary *a = [[NSMutableDictionary alloc]initWithCapacity:10];
NSLog(@"%@", a);
//方法2)给可变字典a初始化了一个空间
NSMutableDictionary *c = [NSMutableDictionary dictionary];
NSLog(@"%@", c);
//a,c打印都是空的
//给可变字典b添加了多个键值对
NSMutableDictionary *b = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", @"xiaogang", @"four",nil];
NSLog(@"%@", b);
}
return 0;
}
向可变字典添加一个字典
int main(int argc, const char * argv[]) {
@autoreleasepool {
//向可变字典添加一个字典
//新建一个可变字典a
NSMutableDictionary *a=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
//新建一个可变字典b
NSDictionary *b = [NSDictionary dictionaryWithObject:@"xiaogang" forKey:@"four"];
//将b字典添加到a字典里面
//--------------字典里面是无序的,因为字典里面是没有下标的!!!-----------------
[a addEntriesFromDictionary:b];
NSLog(@"%@", a);
}
return 0;
}
设置字典字典的value
key一样更新value
Key不一样添加键值对
int main(int argc, const char * argv[]) {
@autoreleasepool {
//设置可变字典中的value
//新建一个可变字典a
NSMutableDictionary *a=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
NSLog(@"%@", a);
//通过可变字典a中的key@"one", 改变它所对应的value值
[a setValue:@"xiaogang" forKey:@"one"];
//打印出来:因为字典a里面有key@"one",所以key@"one"所对应的value变成了@"xiaogang"
NSLog(@"%@", a);
//因为字典a里面没有key@"four",所以新添加一个键值对
[a setValue:@"xiaoliu" forKey:@"four"];
//打印出来:在原有字典a里面新添加一个键值对four = xiaoliu;
NSLog(@"%@", a);
}
return 0;
}
将字典里面的值全部设置成新值
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableDictionary *a = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
NSMutableDictionary *b = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaogang", @"four", @"xiaoliu", @"five", nil];
//将字典a里面的所有值全部设置成了b里面的值,相当于全部设置新值
[a setDictionary:b];
//打印出a里面是b的值,因为已经全部设置成了b的值
NSLog(@"%@", a);
}
return 0;
}
根据key删除相对应的value,等于删除字典中这个元素
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableDictionary *a = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", nil];
//根据字典a里面的key@"one", 删除相对应的value值,等于删除这个元素
[a removeObjectForKey:@"one"];
NSLog(@"%@", a);
}
return 0;
}
根据数组中的key,删除字典中相对应的所有value(等于删除这个元素)
int main(int argc, const char * argv[]) {
@autoreleasepool {
//根据数组中的key,删除字典中相对应的value(也就是元素)
//新建一个可变字典a
NSMutableDictionary *a = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", @"xianggang", @"four", @"xiaoliu", @"five", nil];
//新建一个数组b,其中包含数组a里面的key
NSArray *b = [NSArray arrayWithObjects:@"one",@"three",@"five", nil];
//根据数组b里面的key,删除字典a中相对应的value(也就是元素)
[a removeObjectsForKeys:b];
NSLog(@"%@", a);
}
return 0;
}
删除字典中所有的元素
int main(int argc, const char * argv[]) {
@autoreleasepool {
//删除字典中所有的元素
//新建一个可变字典a
NSMutableDictionary *a = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoming", @"one", @"xiaohong", @"two", @"xiaoqiang", @"three", @"xianggang", @"four", @"xiaoliu", @"five", nil];
//删除字典中所有的元素
[a removeAllObjects];
NSLog(@"%@", a);
}
return 0;
}