NSDictionary字典类:
不可变 键值对存在,是无序的(打印)。key唯一 (由hash(哈希)来实现)
哈希概念:哈希表的本质是一个数组,数组中每一个元素称为一个箱子(bin),箱子中存放的是键值对。
字典Dictionary是集合类的一种。
集合:数组array、字典dictionary、set;
数组是有顺序的,且元素可以重复的;
字典是没有顺序的,键是唯一的,值是可重复的;
set是无序的,且不可重复的。
字典就是以键值对的形式存在的数据集合;
字典的键是唯一的;
字典的值是可重复的;
字典的键值是一一对应的,即有多少个键,就有多少个值;
字典中的键值对是没有顺序的;
此外,字典对象的键和值不能为空(nil)否则存不上,如需要表示空值可以使用NSNull对象。
字典分不可变字典,可变字典两类。
注意:
键值都是对象类型,不能是基础数值;
特别是键,一般都是string对象设置;
NSDictionary在赋值时,同一个key只能赋值一次,即第一次有效。
而NSMutableDictionary 可以多次赋值。
//初始化 赋值
@{@"one":@"1",,,,}
dictionaryWithObjectsAndKeys //初始化并赋值
dictionaryWithDictionary //用一个字典来创建一个字典
dictionaryWithObjects:value forKeys:keyValue
initWithObjectsAndKeys: //初始化并赋值
initWithDictionary //用一个字典来创建一个字典
NSMutableDictionary *dic=[@{ @"key1" : @"value1", @"key2" : @"value", @"key3" : @"value3" } mutableCopy];
用一个value的数组和key的数组创建一个字典,两个数组,必须相对应。
count 键值对的个数:
allKeys
allValues
//通过key找到对应的value:
objectForKey
dict[@"name”];
NSEnumerator *e = [dict objectEnumerator];
上是创建一个字典的值的枚举器!
下是创建一个字典的键的枚举器!
NSEnumerator *e = [dict keyEnumerator];
字典里的快速枚举,实际上是key的枚举(for in)
NSMutableDictionary类:
setObject: forKey: 赋值
dictionaryWithCapacity
initWithCapacity
removeObjectForKey 通过key来删除对应的键值对
removeAllObjects 删除所有的键值对
addEntriesFromDictionary
setDictionary
setObjext forKey
NSDictionary文件操作
//将字典写入文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
存结果是xml文件格式,但苹果官方推荐为plist后缀。
//从文件中读取字典
NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/LNJ/Desktop/dict.plist"];
NSLog(@"newDict = %@", newDict);
//字典遍历
NSDictionary *dic = @{@"1":@"one",@"2":@"two",@"3":@"three"};
//枚举法
NSEnumerator *enumerator = [dic keyEnumerator];
id obj = nil;
while (obj = [enumerator nextObject]) {
NSLog(@"%@__%@",obj,[dic objectForKey:obj]);
}
//快速枚举法:
for (id obj1 in dic) {
NSLog(@"%@---%@",obj1,[dic objectForKey:obj1]);
}
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ --> %@",key,obj);
}];
实现原理:
https://blog.csdn.net/zixiweimi/article/details/56677203