词典对象(NSDictionary和NSMutableDictionary)

时间:2023-03-10 02:33:42
词典对象(NSDictionary和NSMutableDictionary)

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

不可变词典NSDictionary

[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对创建词典对象,结尾必需使用nil标志结束。
[dictionary count]: 得到词典的键值对数量。
[dictionary keyEnumerator]: 将词典的所有key储存在NSEnumerator中,类似于Java语言中的迭代器
[dictionary objectEnumerator]: 将词典的所有value储存在NSEnumerator中
[dictionary objectForKey:key]: 通过传入key对象可以拿到当前key对应储存的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
intmain(intargc,constchar*argv[])
{
    @autoreleasepool{
        NSDictionary*aboutme=[NSDictionary dictionaryWithObjectsAndKeys:@"Liuzhichao",@"name",@"24",@"age",nil];
        //得到词典的键值对数量
        NSLog(@"%lu",[aboutme count]);
        //将词典的所有key储存在NSEnumerator中
        NSEnumerator*enumeratorKey=[aboutme keyEnumerator];
        for(NSObject*objectinenumeratorKey){
            NSLog(@"key:%@",object);
        }
        //将词典的所有value储存在NSEnumerator中
        NSEnumerator*enumeratorObject=[aboutme objectEnumerator];
        for(NSObject*objectinenumeratorObject){
            NSLog(@"value:%@",object);
        }
        //打印词典中所有的键值对
        for(NSString*keyinaboutme){
            NSLog(@"%@ : %@",key,[aboutme objectForKey:key]);
        }
        //通过传入key对象可以拿到当前key对应储存的值
        NSLog(@"key name的值是:%@",[aboutme objectForKey:@"name"]);
    }
    return0;
}
可变的词典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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
intmain(intargc,constchar*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]);
    }
    return0;
}

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