标签:
NSDictionary
1、字典的初始化:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"]; //NSDictionary是不可变字典,dictionaryWithObject: forKey:方法用于给字典dict赋值@"v"和键@"k"。 // 最常用的初始化方式: dict = [NSDictionary dictionaryWithObjectsAndKeys: @"v1", @"k1", @"v2", @"k2", @"v3", @"k3", nil]; //dictionaryWithObjectsAndKeys: 方法用来给字典dict赋多个值键对儿。 NSArray *objects = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil]; NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil]; dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; //dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys 方法用于把值的集合与键的集合组合成对应的键值对儿赋给字典dict。 NSLog(@"%@", dict); //字典也可以用字符串的形式直接打印输出。
2、字典的基本用法:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"v1", @"k1", @"v2", @"k2", @"v3", @"k3", nil]; NSLog(@"count=%zi", dict.count); // count 方法 是计算字典dict有多少个键值对(key-value)。 id obj = [dict objectForKey:@"k2"]; //objectForKey: 方法用于取出字典dict中键@"k2"所对应的值;由于NSDictionary是不可变的,所以只能取值,而不能修改值。 NSLog(@"obj=%@", obj); //id类型的对象也可以用字符串的形式直接打印输出。 NSString *path = @"/Users/apple/Desktop/dict.xml"; [dict writeToFile:path atomically:YES]; //将字典写入指定路径文件path中。 dict = [NSDictionary dictionaryWithContentsOfFile:path]; //从指定路径文件中读取内容写入字典dict中,注:制定的文件必须是XML格式的文件。 -(BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary //比较两个字典是否相同。 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"v1", @"k1", @"v2", @"k2", @"v3", @"k3", nil]; NSArray *keys = [dict allKeys]; //allKeys 方法返回字典dict中所有的key。 NSArray *objects = [dict allValues]; //allValues 方法返回字典dict中所有的Values。 objects = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil] notFoundMarker:@"not-found"]; //根据多个key(多个key的体现形式是把多个key放在数组中,然后提供这个存了多个key的数组,如上例:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil])取出字典中对应的多个value;当key找不到对应的value时,用marker参数值@"not-found"代替value。 -(NSArray *)allKeysForObject:(id)anObject //返回anObject元素对应的所有key。 //注:一个key只可以对应一个value,而一个value可以对应多个key.
//注:一个key只可以对应一个value,而一个value可以对应多个key.
3、遍历字典:
1>for-in
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"v1", @"k1", @"v2", @"k2", @"v3", @"k3", nil]; //只遍历字典的所有key,因为一个value可能对应多个key。 for (id key in dict) { id value = [dict objectForKey:key]; NSLog(@"%@=%@", key, value); }
2>通过迭代器遍历字典
//通过key迭代器遍历字典: NSEnumerator *enumer = [dict keyEnumerator]; id key = nil; while ( key = [enumer nextObject]) { id value = [dict objectForKey:key]; NSLog(@"%@=%@", key, value); } // 通过对象迭代器遍历字典: NSEnumerator *enumer = [dict objectEnumerator];
3>通过Block遍历字典:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"v1", @"k1", @"v2", @"k2", @"v3", @"k3", nil]; [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@=%@", key, obj); }]; //enumerateKeysAndObjectsUsingBlock: 方法是每遍历一次键值对儿就会调一次Block。
4、NSDictionary的key排序:
-(NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr -(NSArray *)keysSortedByValueWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr -(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator //以上三个排序方法参考NSArray的排序。
NSMutableDictionary
// 创建一个空的可变字典: NSMutableDictionary *dict = [NSMutableDictionary dictionary]; Student *stu1 = [Student studentWithName:@"stu1"]; Student *stu2= [Student studentWithName:@"stu2"];//创建了两个对象。 [dict setObject:stu1 forKey:@"k1"];//对象添加进可变字典中。 NSLog(@"stu1:%zi", [stu1 retainCount]); //stu1的计数器会+1 NSDictionary *other = [NSDictionary dictionaryWithObject:@"v2" forKey:@"k2"]; [dict addEntriesFromDictionary:other];//添加其他字典other中键值对到当前字典dict中。 [dict removeAllObjects]; // 删除字典dict中所有的键值对。 [dict removeObjectForKey:@"k1"];// 删除k1对应的值stu1,stu1会自动做一次release操作。 [dict removeObjectsForKeys:[NSArray arrayWithObject:@"k1",@”k2”,nil]]; // 删除多个key对应的value,需要把多个key存入一个数组中,把数组作为参数传给removeObjectsForKeys:方法。 // 字典被销毁时,内部的所有key和value计数器都会-1。 //NSMutableDictionary可变字典的其他初始化方法: +(id)dictionaryWithCapacity:(NSUInteger)numItems -(id)initWithCapacity:(NSUInteger)numItems //NSMutableDictionary添加元素: -(void)setDictionary:(NSDictionary *)otherDictionary//设置当前集合的元素 -(void)setObject:(id)anObject forKey:(id)<NSCopying>aKey//添加一个键值对。
标签:
原文地址:http://www.cnblogs.com/CJDog/p/5125310.html