// 字典、集合、数组排序
//字典用来保存具有映射关系(key-value对)数据的集合,一个key-value对被认为是一个条目(Entry),字典是存储key-value对的容器,与数组不同,字典靠key存取元素,Key不能重复,value必须是对象,键值对在字典中是无序排列的,字典分为可变字典(NSMutableDictionary)和不可变字典(NSDictionary).
//与数组中的集合一样,集合中的元素是唯一的。存储的元素是无序的,存储元素必须是对象,分为NSSet和NSMutableSet,NSCountedSet是NSMutabSet的子类,能记录元素重复的次数。
#import<Foundation/Foundation.h>
int main(intargc, const char * argv[]) {
@autoreleasepool {
// //字典: key唯一!无需,是一个容器
// //不可变数组:长度及内容不可变
// // 1、创建字典对象:初始化,便利构造器
// NSDictionary *dic =[[NSDictionaryalloc]initWithObjectsAndKeys:@"zs",@"name",@"lx",@"names",nil];
// NSDictionary *dic1 =[NSDictionarydictionaryWithObjectsAndKeys:@"zs",@"name",@"lx",@"names",nil];
//
// NSLog(@"%@",dic);
// // 2、获取键值对个数
// NSInteger count = [dic count];
// NSLog(@"%li",count);
//
// // 3、获取所有key 获取所有Value
// NSArray *arr = [dicallKeys];
// NSLog(@"%@",arr);
// NSArray *ar = [dicallValues];
// NSLog(@"%@",ar);
//
// // 4、通过key值查询value
// NSString *value = [dic1objectForKey:@"name"];
// NSString *value1 = [dic1 valueForKey:@"name"];
// NSLog(@"%@ %@",value,value1);
//
// // 可变字典:不可变字典的子类,增加了增删改等方法
//
// // 1、创建字典对象。
// NSMutableDictionary *mdic =[NSMutableDictionarydictionaryWithObjectsAndKeys:@"zs",@"name",@"lx",@"names",nil];
添加键值对。
// [mdicsetObject:@"ylc"forKey:@"namez"];
// NSLog(@"%@",mdic);
修改key对应的value
// // 结论:key值相同,则为修改;key值不同,则为添加。
// [mdicsetValue:@"it" forKey:@"namez"];
// NSLog(@"%@",mdic);
//
删除键值对。
// [mdicremoveObjectForKey:@"namez"];
// NSLog(@"%@",mdic);
//
// // 通过for循环遍历所有键值对
// for (inti = 0; i< [mdic count]; i++) {
// NSArray *arr = [mdicallKeys];
// NSLog(@"%@",[mdicobjectForKey:[arrobjectAtIndex:i]]);
//
// }
// 集合: 无序,元素不可重复,元素必须是对象类型。
// NSSet
// //创建集合对象。
// NSSet *set =[NSSetsetWithObjects:@"1",@"2",@"3", nil];
// NSSet *set1 =[[NSSetalloc]initWithObjects:@"4",@"5",@"6",nil];
// //获取元素个数。
// NSLog(@"%li",[set count]);
// //获取集合中的某个元素。
// NSSet *set2 = [set1 anyObject];
// NSLog(@"%@",set2);
// //判断集合中是否包含某个对象。
// if ([set containsObject:@"4"]) {
// NSLog(@"包含对象");
// }
//
// NSArray *arr =[NSArrayarrayWithObjects:@"1",@"1",@"2",nil];
// NSSet *set12 = [[NSSetalloc] initWithArray:arr];
// NSLog(@"%@",set12);
//
//
// //NSMutableSet是NSSet子类,增加了增、删方法
// // 1、
// NSMutableSet *mSet =[[NSMutableSetalloc]initWithObjects:@"12",@"13", nil];
// NSMutableSet *mSet1 = [NSMutableSet set];
// // 2、添加元素
// [mSetaddObject:@""];
//
// // 3、删除元素.
// [mSetremoveObject:@"13"];
// [mSetremoveAllObjects];
//
// // NSCountedSet: NSMutableSet的子类
// // 一般用来记录重复元素的个数
// NSCountedSet *countSet =[[NSCountedSetalloc]initWithObjects:@"11",@"11",@"11",@"1",@"2",nil];
// // 记录某个元素在集合中出现的次数
// NSInteger count = [countSetcountForObject:@"11"];
// NSLog(@"%li",count);
// 快速枚举
NSArray *a =[NSArrayarrayWithObjects:@"64",@"55", nil];
NSDictionary *dic =[NSDictionarydictionaryWithObjectsAndKeys:@"fd",@"name",@"as",@"names",nil];
NSMutableArray *arr =[NSMutableArrayarrayWithObjects:@"1",@"2",@"3",@"4",nil];
NSSet *set =[NSSetsetWithObjects:@"5",@"6",@"7",@"8",nil];
// 第一个参数是容器类(集合)类的元素
// 第二个参数是容器
// 如果容器类的元素类型不一致,可以用id表示
NSMutableArray *arr1 = [NSMutableArrayarray];
// for in 遍历字典,遍历出来的是key值
for ( id d in [dicallValues]) {
NSLog(@"%@ ",d);
}
for (id ar in arr) {
if( [arisEqualToString:@"2"]){
}
NSLog(@"%@",ar);
}
for (id s in set) {
NSLog(@"%@",s);
}
// 数组排序
// 可变数组排序
NSMutableArray *arc =[NSMutableArrayarrayWithObjects:@"123",@"789",@"4444",@"27",nil];
// 可变数组本身可以改变,因此排序之后不需要返回值
//compare默认升序排序
// @selector是一个方法选择器,后面跟方法名
// //可变数组
// [arcsortUsingSelector:@selector(compare:)];
// //快速枚举
// for (NSString *s in arc) {
// NSLog(@"%@",s);
// }
// // 不可变数组
// NSArray *b = [a sortedArrayUsingSelector:@selector(compare:)];
// for (NSString *s in b) {
// NSLog(@"%@",s);
// }
//
// 排序
[arcsortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
if ([obj1 compare:obj2] > 0) {
returnNSOrderedDescending; // == 1
}else if ([obj1 compare:obj2] < 0){
returnNSOrderedAscending; // == -1
}else{
returnNSOrderedSame; // == 0
}
}];
for (NSString *s in arc) {
NSLog(@"%@",s);
}
}
return 0;
}