iOS集合之NSDictionary与NSMutableDictionary
来源:互联网 发布:服装批发用什么软件 编辑:程序博客网 时间:2024/05/21 20:36
1、NSDictionary功能与用法
类方法与实例方法创建NSDictionary对象,类方法以dictionary开始,而实例方法则以init开头,下面是常见的方法:
- dictionary:创建一个不包含任何key-value对的NSDictionary
- dictionaryWithContentsOfFile:/initWithContentsOfFile:读取指定文件的内容,使用指定的文件内容来初始化NSDictionary,该文件由NSDictionary自己输出生成的。
- dictionaryWithDictionary:/initWithDictionary::使用已有的NSDictionary包含的key-value对来初始化NSDictionary对象
- dictionaryWithObject:forKey::使用单个key-value来创建NSDictionary对象
- dictionaryWithObjects:forKeys:/initWithObjects:forKeys::使用两个NSArray分别指定key、value集合,可以创建包含多组key-value对的NSDictionary
- dictionaryWithObjectsAndKeys:/initWithObjectsAndKeys::调用该方法时,需要按value1、key1、value2、key2……nil的格式传入多组key-value对的NSDictionary
2、访问集合包含的key或value
- count:该方法返回NSDictionary包含的key-value对的数量
- allKeys:返回NSDictionary所包含的全部key
- allKeysForObject::返回指定value对应的全部key
- allValues:该方法返回NSDictionary所包含的全部value
- objectForKey:获取NSDictionary中指定key对应的value
- objectForKeyedSubscript:允许NSDictionary通过下标法来获取指定的key对应的value
- valueForKey:该方法获取该NSDictionary中指定key对应的value
- keyEnumerator:返回用于遍历该NSDictionary所有key的NSEnumerator对象
- objectEnumerator:该方法返回用于遍历该NSDictionary所有value的NSEnumerator对象
- enumerateKeysAndObjectsUsingBlock::使用指定的代码块来迭代执行该集合中所有的key-value对
- 恶奴么rateKeysAndObjectsWithOptions:usingBlock:使用指定的代码块来迭代执行该集合中所有的key-value对,该方法可以传入一个额外的NSEnumerationOptions参数
- writeToFile:atomically::将该NSDictionary对象的数据写入文件。
3、遍历NSDictionary实例
#import <Foundation/Foundation.h>#import "NSDictionary+print.h"#import "FKUser.h"int main(int argc , char * argv[]){@autoreleasepool{// 直接使用多个value,key的形式创建NSDictionary对象NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:[[FKUser alloc] initWithName:@"sun" pass:@"123"], @"one",[[FKUser alloc] initWithName:@"bai" pass:@"345"], @"two",[[FKUser alloc] initWithName:@"sun" pass:@"123"], @"three",[[FKUser alloc] initWithName:@"tang" pass:@"178"], @"four",[[FKUser alloc] initWithName:@"niu" pass:@"155"], @"five" , nil];[dict print];NSLog(@"dict包含%ld个key-value对", [dict count]);NSLog(@"dict的所有key为:%@" , [dict allKeys]);NSLog(@"<FKUser[name=sun,pass=123]>对应的所有key为:%@", [dict allKeysForObject:[[FKUser alloc] initWithName:@"sun" pass:@"123"]]);//①:获取遍历dict所有value的枚举器NSEnumerator* en = [dict objectEnumerator];NSObject* value;//②:使用枚举器来遍历dict中所有value。while(value = [en nextObject]){NSLog(@"%@" , value);}// 使用指定代码块来迭代执行该集合中所有key-value对。[dict enumerateKeysAndObjectsUsingBlock:// 该集合包含多个key-value对,下面代码块就执行多少次^(id key, id value, BOOL *stop){NSLog(@"key的值为:%@" , key);[value say:@"疯狂iOS讲义"];}];}}4、对key进行排序
#import <Foundation/Foundation.h>#import "NSDictionary+print.h"int main(int argc , char * argv[]){@autoreleasepool{// 直接使用多个value,key的形式创建NSDictionary对象NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Objective-C" , @"one",@"Ruby" , @"two",@"Python" , @"three",@"Perl" , @"four", nil];// 打印dict集合的所有元素[dict print];// 获取所有直接调用value的compare:方法对所有key进行排序。//①:返回排好序的所有key组成的NSArray。NSArray* keyArr1 = [dict keysSortedByValueUsingSelector:@selector(compare:)];NSLog(@"%@" , keyArr1); //②:keysSortedByValueUsingComparator排序NSArray* keyArr2 = [dict keysSortedByValueUsingComparator:// 对NSDictionary的value进行比较,字符串越长,即可认为该value越大^(id value1, id value2){// 下面定义比较大小的标准:字符串越长,即可认为value越大if([value1 length] > [value2 length]){return NSOrderedDescending;}if([value1 length] < [value2 length]){return NSOrderedAscending;}return NSOrderedSame;}];NSLog(@"%@" , keyArr2);// 将NSDictionary的内容输出到指定文件中[dict writeToFile:@"mydict.txt" atomically:YES];}}5、对key进行过滤
- keysOfEntriesPassingTest:使用代码块迭代处理NSDictionary的每一个key-value对,对NSDictionary的key-value进行过滤,该代码块必须返回BOOL类型的值,只用当该代码块返回YES时,该key才会被保留下来,该代码块可以接受3个参数,第一个参数代码正在迭代处理的key,第二个参数代表正在迭代处理的value,第三个参数代表是否还需要继续迭代,如果第三个参数设为NO,该方法就会立即停止迭代
- keysOfEntriesWithOptions:passingTest::该方法的功能与前一个方法的功能基本相同,只是该方法可以额外传入一个附加的NSEnumerationOptions选项。
#import <Foundation/Foundation.h>#import "NSDictionary+print.h"int main(int argc , char * argv[]){@autoreleasepool{// 直接使用多个value,key的形式创建NSDictionary对象NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:89] , @"Objective-C",[NSNumber numberWithInt:69] , @"Ruby",[NSNumber numberWithInt:75] , @"Python",[NSNumber numberWithInt:109] , @"Perl", nil];// 打印dict集合的所有元素[dict print];//①:对NSDictionary的所有key进行过滤NSSet* keySet = [dict keysOfEntriesPassingTest:// 对NSDictionary的value进行比较,字符串越长,即可认为该value越大^(id key, id value, BOOL* stop){// 当value的值大于80时返回YES// 这意味着只有value的值大于80的key才会被保存下来return (BOOL)([value intValue] > 80);}];NSLog(@"%@" , keySet);}}5、NSMutableDictionary
较NSDictionary增加了如下方法:
- setObject:forKey:设置一个key-value对,如果NSDictionary中没有包含与该key相同的key-value,NSDictionary将会新增一个key-value对,否则key-value将会覆盖已有的key-value对
- setObject:forKeyedSubscript:通过该方法的支持,允许程序通过下标法来设置key-value对
- addEntriesFromDictionary::将另一个NSDictionary中所有的key-value对复制到当前NSDictionary中
- setDictionary::用另一个NSDictionary中所有的key-value对替换当前NSDictionary中得key-value对
- removeObjectForKey::根据key来删除key-value对
- removeAllObjects:清空该NSDictionary
- removeObjectsForKeys:使用多个key组成的NSArray作为参数,同时删除多个key对应的key-value对
#import <Foundation/Foundation.h>#import "NSDictionary+print.h"int main(int argc , char * argv[]){@autoreleasepool{//①:直接使用多个value,key的形式创建NSDictionary对象NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:89] , @"疯狂Android讲义", nil];// 使用下标法设置key-value对。// 由于NSDictionary中已存在该key,//②:因此此处设置的value会覆盖前面的value。dict[@"疯狂Android讲义"] = [NSNumber numberWithInt:99];[dict print];NSLog(@"--再次添加key-value对--");dict[@"疯狂XML讲义"] = [NSNumber numberWithInt:69];[dict print];NSDictionary* dict2 = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:79] , @"疯狂Ajax讲义",[NSNumber numberWithInt:89] , @"Struts 2.x权威指南", nil];//③:将另外一个NSDictionary中的key-value对添加到当前NSDictionary中[dict addEntriesFromDictionary:dict2];[dict print];//④:根据key来删除key-value对[dict removeObjectForKey:@"Struts 2.x权威指南"];[dict print];}}
0 0
- iOS集合之NSDictionary与NSMutableDictionary
- iOS开发之NSDictionary与NSMutableDictionary
- ios之NSDictionary、NSMutableDictionary使用小结
- IOS学习之NSDictionary和NSMutableDictionary详解
- ios之NSDictionary、NSMutableDictionary使用小结
- ios之NSDictionary、NSMutableDictionary使用小结【转】
- ios NSDictionary\NSMutableDictionary
- NSDictionary与NSMutableDictionary
- OC基础—集合之NSSet、NSDictionary(字典)、NSMutableDictionary
- ios开发——NSDictionary与NSMutableDictionary相关
- IOS成长之路-NSDictionary和NSMutableDictionary例子微解
- IOS成长之路-NSDictionary和NSMutableDictionary例子微解
- IOS成长之路-NSDictionary和NSMutableDictionary例子微解
- IOS成长之路-NSDictionary和NSMutableDictionary例子微解
- IOS NSDictionary和NSMutableDictionary例子
- ios------NSDictionary、NSMutableDictionary使用小结
- iOS基本数据类型-NSDictionary/NSMutableDictionary
- ios之NSDictionary使用集合
- sgu191:Exhibition(模拟)
- 数据结构第二章思维导图
- 解决Android 5.0网络信号出现感叹号的解决方法
- 网络包流程
- 正则表达式 for python
- iOS集合之NSDictionary与NSMutableDictionary
- UVa 12108 Extraordinarily Tired Students(特别困的学生)
- 修改程序名
- 进程同步之临界区域问题及Peterson算法
- WDK译文——Windows文件过滤驱动开发(持续更新中...)
- 数据结构第四章
- sprintf_s 在release下仍然会崩溃
- TOMCAT虚拟路径的设置
- Eigen for pinv