字典
前言
字典其實在了解了數組之上去看的話,是非常容易的。數組是一個一個數出現的,而字典是一對一對“數”出現的,這個“一對數”就是鍵值對。但是我們要注意,字典是集合,集合是無序的。而其實還有一個類型叫set集合,它也是無序的,因為它是單值無重複的集合。而且他們都有可變和不可變之分,我們把字元串、數組、字典還有set集合一起對比着學,就會容易記住了。
不可變字典 NSDictionary
1.概念:
字典是關鍵字“key”及其定義的值(value)所構成的集合,即它是由key-value組成的鍵值對的集合。‘key’一般是‘NSString’類型的,‘value’是OC中任意對象。對于字典來講,我們就是通過‘key’來通路‘value’。
2.為什麼在有了數組之後,還需要字典?
在有大量的資料或頻繁的查找的時候,使用字典效率更高。因為字典采用鍵查詢的優化查詢方式。
初始化
建立一個空的字典
NSDictionary *dictionary1=[[NSDictionary alloc]init];
NSDictionary *dictionary2=[NSDictionary dictionary];
NSDictionary *dictionary3=[NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
建立一個多個鍵值對的字典
NSDictionary *dictionary4=[NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@,@"age",@"G2",@"address",nil];
字典裡面存放的元素都要是對象類型才可以,如果是基本資料類型,要先把基本資料類型進行封裝,然後再放到這些集合中去。
NSDictionary *dictionary5=[NSDictionary dictionaryWithDictionary:dictionary4];
NSLog(@"%@",dictionary5);
新文法建立字典
NSDictionary *[email protected]{};
新文法建立隻有一個鍵值對的字典。
NSDictionary *[email protected]{@"name":@"Rick"};
新文法建立隻有一個鍵值對的字典。
NSDictionary *[email protected]{@"name":@"Rick",@"age":@25,@"address":@"G2p"};
從本地讀取字典
NSDictionary *dictionary9=[NSDictionary dictionaryWithContentsOfFile:@""];
從網絡讀取字典
NSDictionary *dictionary10=[NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
字典中鍵值對的數量
NSUInteger count=[dictionary4 count];
如何通路字典?
通過key通路字型中對應的值
NSString *name=[dictionary4 objectForKey:@"name"];
新文法
NSString *newname= dictionary4[@"name"];
如何通路字典中的key/value
表示字典中所有的key
NSArray *keysArray=dictionary4.allKeys;
NSArray *valuesArray=dictionary4.allValues;
for (int i=; i<dictionary4.count; i++) {
NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
}
//forin
for (NSString *key in keysArray) {
NSLog(@"%@ = %@",key,dictionary4[key]);
}
使用枚舉器周遊
NSEnumerator *enumerator =[keysArray objectEnumerator];
id key;
while(key = [enumerator nextObject]){
NSLog(@"%@ =%@",key,dictionary4[key]);
}
NSDictionary *[email protected]{@"name":@"Rick",@"age":@,@"address":@"G2p" ,@"name":@"Jack"};
for (NSString *str in dictionary.allKeys) {
NSLog(@"%@ = %@",str,dictionary[str]);
}
可變字典 NSMutableDictionary
1.初始化
建立一個空的字典
NSMutableDictionary *mDictionary1 =[NSMutableDictionary dictionary];
建立一個有一個鍵值對的可變字典
NSMutableDictionary *mDictionary2=[NSMutableDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
NSMutableDictionary *mDictionary3=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@,@"age",@"GZ",@"address", nil];
通過一個字典建立一個字典
NSMutableDictionary *mDictionary4=[NSMutableDictionary dictionaryWithDictionary:mDictionary3];
//mDictionary4.allKeys
//mDictionary4.allValues
可變字典獨有的初始化方法
NSMutableDictionary *mDictionary5=[NSMutableDictionary dictionaryWithCapacity:];
從本地讀取字典
NSMutableDictionary *mDictionary6=[NSMutableDictionary dictionaryWithContentsOfFile:@""];
從網絡讀取字典
NSMutableDictionary *mDictionary7=[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
操作字典
增
[mDictionary5 setValue:@"Rick" forKey:@"name"];
[mDictionary5 setValue:@ forKey:@"age"];
改
(如果原來的字典中已經有了akey這個值,那麼這次新加的值就會覆寫原來的關鍵字(鍵)akey對應的值。還是一樣的指令,後面的值會把前面的覆寫掉)
[mDictionary5 setValue:@"Jack" forKey:@"name"];
mDictionary5[@"name"][email protected]"Leo";
删除
删除指定key的對象
[mDictionary5 removeObjectForKey:@"name"];
删除所有的對象
[mDictionary5 removeAllObjects];
找出相同值的鍵
NSMutableDictionary *mDic8=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",
@,@"age",
@"GZ",@"address",
@"Rick",@"name2",
@"Rick",@"name3",nil];
NSArray *keysArray=mDic8.allKeys;
NSArray *valuesArray=mDic8.allValues;
方法一
for(int i=;i<mDic8.count;i++){
if(valuesArray[] ==valuesArray[i]){
NSLog(@"%@",keysArray[i]);
}
if([valuesArray[i] isKindOfClass:[NSNumber class]]){
int age=[valuesArray[i] intValue];
mDic8[@"name"]=[NSString stringWithFormat:@"%d",age];
}
}
方法二
for (NSString *key in keysArray) {
NSString *string;
if([mDic8[key] isKindOfClass:[NSNumber class]]){
int age=[mDic8[key] intValue];
mDic8[key]=[NSString stringWithFormat:@"%d",age];
}
else{
string =mDic8[key];
}
if([string isEqualToString:@"Rick"]){
NSLog(@"");
}
}