一:字典的基础讲解
NSDictionary(字典),NSDictionary类似于 .net中的parameter,l类似于java中的map。
通过唯一的key找到对应的值,一个key只能对应一个只,而多个key可以对应同一个值。NSDictionary 在初始化之后,就不可以再进行修改。
使用类方法创建NSDictionary对象。 |
初始化一个NSDictionary对象。使用+ (id)dictionaryWithObject:(id)object forKey:(id)key;
NSDictionary* dic = [NSDictionary dictionaryWithObject:@"values1" forKey:@"key1"]; NSLog(@"%@",dic); //结果
2014-08-26 19:13:29.274 Nsdictonary[288:707] {
key1 = values1;
}
初始化一个NSDictionary对象。使用+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION;
NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys: @"values1",@"key1" @"values2",@"key2" @"values3",@"key3" ,nil]; NSLog(@"%@",dic);、
//结果
初始化一个NSDictionary对象。使用+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSLog(@"%@",dic); 结果:
2014-08-26 19:30:34.286 Nsdictonary[345:707] {
key1 = values1;
key2 = values2;
key3 = values3;
}
使用实例方法创建NSDictionary |
创建一个空的字典:
NSDictionary* dic = [[NSDictionary alloc]init]; NSLog(@"%@",dic);
通过两个数组创建字典对象。
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic = [[NSDictionary alloc] initWithObjects:values forKeys:keys]; NSLog(@"%@",dic);
通过一个字典来创建一个新的字典。
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSLog(@"%@",dic);
计算一个字典中有多少个键值对:??????
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSLog(@"count :%lu",[dic count]); NSLog(@"%@",dic1); 结果:
2014-08-26 19:44:54.809 Nsdictonary[439:707] count :3
2014-08-26 19:44:54.817 Nsdictonary[439:707] {
key1 = values1;
key2 = values2;
key3 = values3;
}
通过健来去对应的值:
NSObject* obj = [dic objectForKey:@"key1"];
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSObject* obj = [dic objectForKey:@"key1"]; NSLog(@"key1 = %@",obj); 结果: 2013-08-26 19:47:24.175 Nsdictonary[453:707] key1 = values1
将字典写入文件中:
[dic writeToFile:path atomically:YES]; |
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSString* path =@"/Users/administrator/Desktop/test.xml"; NSLog(@"dic:%@",dic); [dic writeToFile:path atomically:YES]; NSDictionary* dicTest = [NSDictionary dictionaryWithContentsOfFile:path]; NSLog(@"dicTest: %@",dicTest); 结果:
2014-08-26 19:55:31.276 Nsdictonary[500:707] dic:{
key1 = values1;
key2 = values2;
key3 = values3;
}
2014-08-26 19:55:31.294 Nsdictonary[500:707] dicTest: {
key1 = values1;
key2 = values2;
key3 = values3;
}
返回所有的keys:
NSArray* retKeys = [dic allKeys];:
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSArray* retKeys = [dic allKeys]; NSLog(@"all keys :%@",retKeys); 结果:
2013-08-26 19:58:48.871 Nsdictonary[515:707] all keys :(
key1,
key3,
key2
)
返回所有的值:allvalues
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSDictionary* dic2 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:dic2]; NSArray* retValues = [dic allValues]; NSLog(@"all keys :%@",retValues); 结果:
2014-08-26 19:59:57.768 Nsdictonary[532:707] all keys :(
values1,
values3,
values2
)
NSMutableDictionary 创建插入删除 |
创建一个
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); 结果:
2014-08-26 20:11:56.388 Nsdictonary[634:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
插入一个新的健值对:
[dic setObject:@"values4" forKey:@"key4"];
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); [dic setObject:@"values4" forKey:@"key4"]; NSLog(@"dic : %@",dic); 结果:
2014-08-26 20:15:36.330 Nsdictonary[680:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2013-08-26 20:15:36.338 Nsdictonary[680:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
key4 = values4;
}
移除一个健值对:
[dic removeObjectForKey:@"key1"];
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); [dic removeObjectForKey:@"key1"]; NSLog(@"dic : %@",dic); 结果:
2014-08-26 20:17:33.980 Nsdictonary[695:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2013-08-26 20:17:34.013 Nsdictonary[695:707] dic : {
key2 = values2;
key3 = values3;
}
移除所有健值对:
removeAllObjects
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); [dic removeAllObjects]; NSLog(@"dic : %@",dic); 结果:
2013-08-26 20:18:38.027 Nsdictonary[711:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2013-08-26 20:18:38.036 Nsdictonary[711:707] dic : {
}
遍历字典:
for(id objects in dic) |
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); //类似于foreach for(id objects in dic) { NSObject* obj = [dic objectForKey:objects]; NSLog(@"%@ = %@",objects,obj); } 结果:
2014-08-26 20:24:00.303 Nsdictonary[757:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2014-08-26 20:24:00.353 Nsdictonary[757:707] key1 = values1
2014-08-26 20:24:00.362 Nsdictonary[757:707] key3 = values3
2014-08-26 20:24:00.371 Nsdictonary[757:707] key2 = values2
迭代器遍历字典:
NSEnumerator* em = [dic keyEnumerator];
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); NSEnumerator* em = [dic keyEnumerator]; id key =nil; while(key = [em nextObject]) { NSObject* obj = [dic objectForKey:key]; NSLog(@"%@ = %@",key,obj); } 结果:
2014-08-26 20:28:23.753 Nsdictonary[771:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2014-08-26 20:28:23.871 Nsdictonary[771:707] key1 = values1
2014-08-26 20:28:23.873 Nsdictonary[771:707] key3 = values3
2014-08-26 20:28:23.879 Nsdictonary[771:707] key2 = values2
block遍历字典:
[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@",key,obj); }];
NSArray* values = [NSArray arrayWithObjects:@"values1",@"values2",@"values3", nil]; NSArray* keys = [NSArray arrayWithObjects:@"key1",@"key2",@"key3", nil]; NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjects:values forKeys:keys]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithDictionary:dic2]; NSLog(@"dic : %@",dic); [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@",key,obj); }]; 结果:
2014-08-26 20:32:09.894 Nsdictonary[789:707] dic : {
key1 = values1;
key2 = values2;
key3 = values3;
}
2014-08-26 20:32:09.906 Nsdictonary[789:707] key1 = values1
2014-08-26 20:32:09.917 Nsdictonary[789:707] key2 = values2
2014-08-26 20:32:09.913 Nsdictonary[789:707] key3 = values3
IOS中 NSDictionary无序字典排序
按NSDictionary的key来对其进行排序:
先将dict的allkeys赋给一个数组,然后通过sortedArrayUsingComparator:方法对数组排序,然后遍历数组取字典对应key的值就ok
NSArray *keys = [dict allKeys];
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(idobj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
for (NSString *categoryId in sortedArray) {
??
NSLog(@"[dict objectForKey:categoryId] === %@",[dictobjectForKey:categoryId]);
}
方法二:
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"students" ofType:@"plist"];
NSDictionary *stuDic = [NSDictionary dictionaryWithContentsOfFile:filePath];
self.studentIndexArray = [NSMutableArray arrayWithCapacity:1];
NSArray *arr = [[stuDic allKeys] sortedArrayUsingSelector:@selector(compare:)];