词典(dictionary)顾名思义就是同由键-值组成的数据集合.与在词典中查找单词定义一样,可以通过对象的键从词典中获取需要的对象,看到这里,你是不是想起了java中的map?和NSArray一样,一个词典对象也能保存不同类型的值,词典也分别有不可变词典和可变的词典(NSDictionary与NSMutableDictionary),前者是线程安全的,后者不是 。

不可变词典NSDictionary

[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对创建词典对象,结尾必需使用nil标志结束。

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSDictionary* aboutme = [NSDictionary dictionaryWithObjectsAndKeys:@"Liuzhichao",@"name",@"24",@"age", nil];

        //得到词典的键值对数量
        NSLog(@"%lu", [aboutme count]);

        //将词典的所有key储存在NSEnumerator中
        NSEnumerator *enumeratorKey = [aboutme keyEnumerator];
        for (NSObject *object in enumeratorKey) {
            NSLog(@"key:%@", object);
        }

        //将词典的所有value储存在NSEnumerator中
        NSEnumerator *enumeratorObject = [aboutme objectEnumerator];
        for (NSObject *object in enumeratorObject) {
            NSLog(@"value:%@", object);
        }

        //打印词典中所有的键值对
        for(NSString *key in aboutme){
            NSLog(@"%@ : %@",key,[aboutme objectForKey:key]);
        }

        //通过传入key对象可以拿到当前key对应储存的值
        NSLog(@"key name的值是:%@", [aboutme objectForKey:@"name"]);
    }

    return 0;
}

可变的词典NSMutableDictionary

NSMutableDictionary是NSDictionary的子类,所以它继承了NSDictionary类的方法. +(id)dictionaryWithCapacity:size 创建一个size大小的可变字典 -(id)initWithCapacity:size 初始化一个size 大小的可变字典 -(void)removeAllObjects 删除字典中所有元素 -(void)removeObjectForKey:key 删除字典中key位置的元素 -(void)setObject:obj forKey:key 添加 (key , obj)到字典中去;若key已经存在,则替换值为 obj

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // 创建动态字典,初始化长度为5
        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithCapacity:5];

        // 向字典中添加数据
        [mutableDictionary setObject:@"obj1" forKey:@"key1"];
        [mutableDictionary setObject:@"obj2" forKey:@"key2"];
        [mutableDictionary setObject:@"obj3" forKey:@"key3"];
        [mutableDictionary setObject:@"obj4" forKey:@"key4"];
        [mutableDictionary setObject:@"obj5" forKey:@"key5"];

        // 删除单个元素
        [mutableDictionary removeObjectForKey:@"key4"];

        // 增加一个元素,key3已经存在,会修改key3对应的值
         [mutableDictionary setObject:@"obj33333" forKey:@"key3"];

        // 打印可变字典中所有key
        NSLog(@"all keys: %@", [mutableDictionary allKeys]);
        // 打印可变字典中所有value
        NSLog(@"all values: %@", [mutableDictionary allValues]);
    }

    return 0;
}

和数组不一样,词典对象是无序的,所以,当枚举词典时,第一个放到词典中的键-对象并不一定会第一个取出.