词典(dictionary)顾名思义就是同由键-值组成的数据集合.与在词典中查找单词定义一样,可以通过对象的键从词典中获取需要的对象,看到 这里,你是不是想起了java中的map?和NSArray一样,一个词典对象也能保存不同类型的值,词典也分别有不可变词典和可变的词典 (NSDictionary与NSMutableDictionary),前者是线程安全的,后者不是 。
[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
|
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是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
|
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
;
}
|
和数组不一样,词典对象是无序的,所以,当枚举词典时,第一个放到词典中的键-对象并不一定会第一个取出.