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
原创粉丝点击