【OC】字典(NSDictionary与NSMutableDictionary) | 您所在的位置:网站首页 › nsdictionary如果key不存在 › 【OC】字典(NSDictionary与NSMutableDictionary) |
字典
前言NSDictionary的功能与用法对NSDictionary的key排序对NSDictionary的key进行过滤使用自定义类作为NSDictionary的keyNUMutableDictionary的功能与用法
前言
NSDictionary用于保存具有映射关系的数据,故而,NSDictionary保存着两种数值,分别是建和值。 注意: key与value都可以是任意引用类型的数据,Map的key不允许重复。 key与value之间存在着一一对应的关系,即通过指定的key,总是可以找到唯一的、确定的value。 key与value之间的关系: NSDictionary中包含一个allkeys方法,用于返回NSDictionary所有key组成的集合。 但是NSDictionary将allkeys方法返回值设为NSArray——说明该方法经过了进一步转换,已经将NSSet集合转换为NSArray集合。 NSDictionary的功能与用法NSDictionary集合由多组key-value对组成,故而创建NSDictionary时需要同时指定多组key、value对。下面是创建NSDictionary对象的几种常见方法: 实现部分: -(void) print { NSMutableString* result = [NSMutableString stringWithString:@"{"]; for(id key in self) { [result appendString:[key description]]; [result appendString:@"="]; [result appendString:[self[key]description]]; [result appendString:@","]; } NSUInteger len = [result length]; [result deleteCharactersInRange:NSMakeRange(len - 2, 2)]; [result appendString:@"}"]; NSLog(@"%@",result); }以上程序示范了NSDictionary的两个基本用法,程序可以通过快速枚举来遍历NSDictionary的所有key。除此之外,程序也可以根据key来获取NSDictionary中对应的value。 下面程序示范了NSDictionary的功能: #import #import "NSObject+print.h" #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { //直接使用多个value、key的形式创建NSDictionary对象 NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: [[Person alloc] initWithName:@"Reus" pass:@"123"],@"one", [[Person alloc] initWithName:@"Messi" pass:@"234"],@"two", [[Person alloc] initWithName:@"HHH" pass:@"345"],@"three", [[Person alloc] initWithName:@"WWW" pass:@"456"],@"four", [[Person alloc] initWithName:@"jjj" pass:@"567"],@"five",nil]; [dict print]; NSLog(@"dict包含的%ld个key—value对", [dict count]); NSLog(@"dict所有的key为:%@", [dict allKeys]); NSLog(@"对应的所有key为:%@",[dict allKeysForObject:[[Person alloc] initWithName:@"Reus" pass:@"123"]]); //获取遍历dict所有value的枚举器 NSEnumerator* en = [dict objectEnumerator]; NSObject* value; while(value = [en nextObject]) { NSLog(@"%@", value); } //使用指定代码块来迭代执行该集合中的所有key-value对 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL*stop) { NSLog(@"key的值为:%@",key); [value say:@"哇哈哈"]; }]; } return 0; } 对NSDictionary的key排序NSDictionary提供了方法对NSDictionary的所有key进行排序,这些方法执行完成后将返回排序完成后的所有key组成的NSArray。NSDictionary提供的排序方法如下: 示例程序: #import #import "NSObject+print.h" //#import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: @"Reus", @"one", @"Messi",@"two", @"HHH",@"three", @"WWW" ,@"four",nil]; [dict print]; NSArray* keyArr1 = [dict keysSortedByValueUsingSelector:@selector(compare:)]; NSArray* keyArr2 = [dict keysSortedByValueUsingComparator:^(id value1, id value2) { if([value1 length] > [value2 length]) { return NSOrderedDescending; } if([value1 length] @autoreleasepool { NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:89],@"Object-C", [NSNumber numberWithInt:69],@"RUby", [NSNumber numberWithInt:75],@"Python", [NSNumber numberWithInt:109],@"Perl",nil]; [dict print]; //对NSDictionary的所有key进行过滤 NSSet* keySet = [dict keysOfEntriesPassingTest: ^(id key, id value, BOOL* stop) { //当value的值大于80时返回YES //意味着只有value的值大于80才会被保存下来 return (BOOL)([value intValue] > 80); }]; NSLog(@"%@", keySet); } return 0; }运行结果: 上面程序保留了两个key:Perl和Object-C,他们对应的value分别为109和89,两个value都大于80,因此这两个key可以被保留下来。 使用自定义类作为NSDictionary的key前面介绍NSDictionary的功能与用法,都是使用NSString作为NSDictionary的key。如果程序打算使用自定义的类作为NSDictionary的key,则该自定义类必须满足以下要求: 测试程序: #import #import "NSObject+print.h" #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person* u1 = [[Person alloc] initWithName:@"bai" pass:@"345"]; NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: @"one",[[Person alloc] initWithName:@"sun" pass:@"123"], @"two",u1, @"three",[[Person alloc] initWithName:@"sun" pass:@"123"], @"four",[[Person alloc] initWithName:@"tang" pass:@"178"], @"five",[[Person alloc] initWithName:@"niu" pass:@"155"],nil]; u1.pass = nil; //由于NSDictionary并未直接使用u1所指向的Person作为key //而是先复制了u1所指向的对象的副本,然后以该副本作为key //因此程序将可以看到dict的key不会受到任何影响 [dict print]; } return 0; } NUMutableDictionary的功能与用法NSMutableDictionary继承了NSDictionary,代表一个key-value可变的NSDictionary集合。由于NSMutableDictionary可以动态的添加key-value对,故而,创建NSMutableDictionary集合时可以指定初始容量。 NUSMutableDictionary新增的方法: 运行结果: |
CopyRight 2018-2019 实验室设备网 版权所有 |