本文主要是介绍OC学习:OC字典NSDictionary,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*字典的有关键字key和关键字所对应value构成的集合,key和value都是存放对象,在大量的数据或频繁的信息查找时,字典的效率比数组要高。字典采用键查询的优化存储方式,用匹配的key来找到对应的value值,因此在字典中不能出现相同的key。
不可变字典NSDictionary是可变字典NSMutableDictionary的父类。
在字典中键值对是无序的
*/
//初始化一对value和key
NSDictionary *dictionary1 = [NSDictionary dictionaryWithObject:@"这是value" forKey:@"这是key"];
//初始化多对@value,@key键值对(创建时要成对出现,key和value不能换)
NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
NSDictionary *dictionary20 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
//用字典创建字典
NSDictionary *dictionary21 = [NSDictionary dictionaryWithDictionary:dictionary2];
//对字典内存基理的探索
if (dictionary2 == dictionary20){
NSLog(@"2-20 xiangtong");
}
if (dictionary2 == dictionary21){
NSLog(@"2-21 xiangtong");
}
//上面2句if条件语句无输出操作,则说明他们的三个字典对象的指针是不相同的, 有着自己的内存。
//但是下面两个if条件都执行了NSLog代码,且在遍历字典时输出的结果与输入时是不一致的,因此我们可以想到字典中vaule的存放是无序,那么说明字典中的value存放的方法是一样的,由于一样的存放方法找到了一样的内存空间,值若存在,返回地址,若不存在则创建。
if (dictionary2[@"key1"]==dictionary20[@"key1"]) {
NSLog(@"2.1-20.1 xiangtong");
}
if (dictionary21[@"key1"]==dictionary20[@"key1"]) {
NSLog(@"21.1-20.1 xiangtong");
}
//以下if语句进行了输出操作。
NSString *string = @"value1";
if (dictionary21[@"key1"]==string) {
NSLog(@"21.1-string xiangtong");
}
//OC中的内存管理机制大概也就被我们发现了,在集合NSSet中我们也会发现同样的情况,因此在OC中我们能否修改对象的值的?
//用数组创建字典
NSArray *arrayKey = @[@"key1",@"key2",@"key3"];
NSArray *arrayValue = @[@"value1",@"value2",@"value3"];
NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjects:arrayValue forKeys:arrayKey];
//新语法创建字典
NSDictionary *dictionary5 = @{};
NSDictionary *dictionary6 = @{@"key1":@"value1",@"key2":@"value2"};
// 求字典中键值对的数量
NSInteger count = dictionary2.count;
//访问字典的value
NSString * KeyForValue1 = [dictionary2 objectForKey:@"key1"];
//新语法在不可变字典中是可行的,但是在可变字典中不可行
NSString * keyForValue2 = dictionary2[@"key2"];
//访问字典中所有的key
NSArray *allKeys = [dictionary2 allKeys];
//访问字典中所有的value
NSArray *allValues = [dictionary2 allValues];
//遍历字典,从其输出的结果可以看出来字典存放的键值是无序的。根输入时的顺序不同。
//而且在遍历可变字典的时候可以进行删除字典的操作。
for ( NSString *obj in allKeys) {
NSLog(@"%@,%@",obj,dictionary2[obj]);
}
这篇关于OC学习:OC字典NSDictionary的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!