不可变字典NSDictionary
1、创建不可变字典
NSString *key1Str = @"zhang";
NSArray *value1Array = @[@"zhang3",@"zhang4",@"zhang5"];
a、实例方法创建,以nil结尾
NSDictionary *dic1 = [NSDictionary alloc] initWithObjectsAndKeys:value1Array,key1Str,value2Array,key2Str,nil];
b、类方法创建,以nil结尾
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:vaule1Array,key1Str,vaule2Array,key2Str,nil];
c、新语法创建
//格式为Key:Vaule,Key1:Vaule2
NSDictionary *dic3 = @{key1Str:value1Array,key2Str:value2Array};
2、查看字典里元素个数
NSInteger len1 = dic1.count;
3、字典根据key来获取value
NSArray *temp = [dic1 valueForKey:@"wang"];
NSArray *temp1 = dic1[@"wang"];//新语法
4、取出所有的keys
NSArray *allkeyarray = [dic1 allkeys];//返回值是一个数组类型
5、取出所有的Value
NSArray *allValues = [dic1 allValues];//返回值为数组。是一个二维数组,也就是数组中嵌套数组
可变字典 NSMutableDictionary
1、可变字典的创建
a、实例方法创建
NSMutableDictionary *dicM1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:value1Array,key1Str,value2Array,key2Str,nil];
b、类方法创建
NSMutableDictionary *dicM2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:value1Array,key1Str,value2Array,key2Str];
2、可变字典的添加
NSString *key3Str = @"li";//建立新key
NSArray *Value3Array = @[@"li3",@"li4",@"li5"];//建立新Value
//第一个参数是Value,第二个参数是key
[dicM1 setObject:Value3Array forKey:key3Str];
注意:在字典里key是唯一的,在添加时,如果key已经存在了,就会将其原来的Value值给覆盖掉
3、可变字典的删除
a、根据一个key来删除元素
[dicM1 removeObjectForKey:@"zhang"];
b、根据多个key开删除元素
[dicM1 removeObjectForKeys:@[@"li",@"wang"]];
c、删除所有元素
[dicM1 removeAllObject];
4、字典的遍历
a、快速遍历
for(NSString *key in dicM1){
NSString *Value = dicM1[key];
NSLog(@"key=%@ value=%@",key,value);
}
b、普通遍历
NSArry *allKeys = [dicM1 allkeys];//取出所有的key值
for(int i = 0;i < allKeys.count;i++){
NSString *key1 = [allkeys objectAtIndex:i];//简写allkeys[i]
NSArray *value1 = dicM1[key1];
NSLog(@"%@ %@",key1,value1);
}
5、给字典排序
NSArray *keysSortArry = [dic8 keysSortedByValueUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
int v1 = [obj1 intValue];
int v2 = [obj2 intValue];
if (v1>v2) { //升序
return NSOrderedAscending;
}else if (v1<v2)//降序
{
return NSOrderedDescending;
}
return NSOrderedSame; //相等
}];
NSLog(@"排序后======================");
NSLog(@"keysSortArry = %@",keysSortArry);
for (int i = 0; i<keysSortArry.count; i++) {
NSString *key = [keysSortArry objectAtIndex:i];
NSString *value = [dic8 objectForKey:key];
NSLog(@"key = %@ value = %@",key,value);
}
// 2、字母排序 汉字不能排序
NSDictionary *dic8 = @{
@"zhang3":@"的",
@"li4":@"abd",
@"wang5":@"Dfk",
@"zhao6":@"cdf"
};
// 遍历字典
// for (NSString *key in dic8) {
// NSString *value = [dic8 allValues];
// NSLog(@"%@ %@",key,value);
// }
// 给字典排序
NSArray *keysSortArry = [dic8 keysSortedByValueUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
// 字母排序
NSComparisonResult result = [obj2 caseInsensitiveCompare:obj1];//不区分大小写排序
return result;
}];
// 新的排序方法
NSDictionary *dic8 = @{
@"zhang3":@"78890",
@"li4":@"788",
@"wang5":@"749",
@"zhao6":@"9979"
};
// compare 这个是数字排序,拿来排序的Value值位数必须一样,要么都2位数,要么都3位数,不然就只排序第一位数字
NSArray *keySortOtherArry = [dic8 keysSortedByValueUsingSelector:@selector(compare:)];
NSLog(@"%@",keySortOtherArry);
for (int i = 0; i<keySortOtherArry.count; i++) {
NSString *key = [keySortOtherArry objectAtIndex:i];
NSString *value = [dic8 valueForKey:key];
NSLog(@"%@ %@",key,value);
}