07 - 字典
字典里存放的是许多键值对。在字典的内部,键值对的key是唯一的,也就是说在一个字典的内部没有哪两个键值对的key是相同的,如果有两个键值的key是一样的话,就会出现运行时错误。一个key可以是任何遵循NSCopying协议,并且实现hash和isEqual:方法的任意对象。下面的这个字典包括了一个人的各种信息。像例子里所展示的那样,字典里可以包含任何对象,包括另一个集合对象。
字典和数组一样,也有可变和不可变版本。
创建一个字典有分配内存-初始化和简洁的类方法。如:
最后一个方法 dictionaryWithObjects:forKeys: 接收两个参数,并且都是数组实例。两个数组应该是同样长度的,第一个数组中的对象和第二个数组中的对象是分别对应的,也就是说第一个数组中的第一个数组和第二个数组中的第一个key是对应的。
count 方法返回的是字典中键值对的数目,可以通过调用 objectForKey: 这个方法来访问字典中具有某个特别key的键值,如果字典中没有这个key,那么就会返回nil。
例如:
1 NSArray *keys = [NSArray arrayWithObjects:@"name", @"identificationNumber", nil]; 2 NSArray *values = [NSArray arrayWithObjects:@"Bob", [NSNumber numberWithInt:123], nil]; 3 NSMutableSet *dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys]; 4 NSLog(@"dictionary count: %d", [dictionary count]); //prints the count as 2 5 NSLog(@"object for name key: %@", [dictionary objectForKey:@"name"]); //prints Bob 6 NSLog(@"object for birthday key: %@", [dictionary objectForKey:@"birthday"]); // prints nil
就像NSArray一样,字典也有另外的一种定义方式:
1 NSDictionary *dictionary = @{ 2 @"name" : NSUserName(), 3 @"date" : [NSDate date], 4 @"processInfo" : [NSProcessInfo processInfo] 5 };
id value = object[key];
可变字典:
是字典的扩展,提供了通过key来对字典进行添加、删除、替换的方法。
用 removeObjectForKey: 这个方法来移除某个key对应的值,
通过 setObject: forKey: 方法来对字典进行添加和替换的操作。如果字典内部之前有一个键值对的key跟这个方法中的Key 是一样的,那么这个方法就会替换掉之前字典中的那个键值对;相反的,如果之前这个字典当中不存在这个key 那么就会重新添加一个新的键值对。