NSDictionary

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、NSDictionarykey排序:

-(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//添加一个键值对。

  注:OC中数组和字典只能存储OC对象不能存放基本数据类型。 

原文地址:https://www.cnblogs.com/CJDog/p/5125310.html