Objective_C_05
15/12/10
// Objective_C_05
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
#pragma mark-----数组排序-----
// 可变数组改变的时自身 不可变数组生成一个新的数组
// 数组给提供一个方法,实现排序
// 可变数组方法:sortUsingSelector
// 不可变数组方法:sortedArrayUsingSelector
// 一个参数:一个方法,返回是否进行元素交换
// @selector会去对象中寻找括号里面的方法名,并返回
// 简单理解:参数是SEL,就是要在这里传入一个方法,做法就是通过@selector和括号里面的方法名指定方法
// NSMutableArray *sortArray = [NSMutableArray arrayWithObjects:@"aa",@"bb",@"cc",@"ac",@"df",@"bb",@"zz",@"mm", nil];
// [sortArray sortUsingSelector:@selector(compare:)];
// NSLog(@"%@",sortArray);//从小到大
// for (int i = 0; i < [sortArray count]/2; i++) {
// [sortArray exchangeObjectAtIndex:i withObjectAtIndex:[sortArray count]-i-1];
// }
// NSLog(@"%@",sortArray);//从大到小
#pragma mark-----字典类-----
/*
字典的一些特点
1.字典元素是以键值对的形式存在的
2.键值对就是 key:value 的形式
3.字典中元素的存放是无序的
4.不可以通过下标获取元素,需要通过key获取元素
5.字典中的key是不允许重复的,但是value是可以重复的
6.字典有可变和不可变之分:NSDictionary是NSMutableDictionary 父类
*/
#pragma mark-----不可变字典-----
// 创建不可变字典
// 第1种:
NSDictionary *dic = [[NSDictionary alloc]initWithObjects:@[@"value1",@"value2",@"value3"] forKeys:@[@"key1",@"key2",@"key3"]];
NSLog(@"%@",dic);
// 第2种:
NSDictionary *dic2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
NSLog(@"%@",dic2);
// 第3种 字面量
NSDictionary *dic3 = @{
@"key1":@"value1",
@"key2":@"value2",
@"key3":@"value3"
};
NSLog(@"%@",dic3);
NSDictionary *dic11 = @{
@"name":@"刘能",
@"age":@"42",
@"sex":@"男"
};
#pragma mark-----求有几对键值对-----
NSLog(@"%lu",[dic11 count]);
#pragma mark-----求关键字目录(求所有的key)-----
NSArray *temp = [dic11 allKeys];
NSLog(@"%@",temp);
#pragma mark-----求所有的value值-----
temp = [dic11 allValues];
NSLog(@"%@",temp);//UTF-8
#pragma mark-----通过key取value的值-----
// 正常方式
NSLog(@"%@",[dic11 valueForKey:@"sex"]);
// 特殊方式
NSLog(@"%@",dic11[@"name"]);
// 实现遍历一个字典里面的所有元素
for (int i = 0; i < [dic11 count]; i++) {
NSArray *temp = [dic11 allKeys];
NSLog(@"%@ %@",temp[i],dic11[temp[i]]);
}
NSArray *keys = [dic11 allKeys];
for (int i = 0; i < [keys count]; i++) {
NSLog(@"%@ %@",keys[i],dic11[keys[i]]);
}
#pragma mark-----可变字典-----
// NSMutableDictionary *mutabledic = dic11.mutableCopy;
NSMutableDictionary *mDic = [[NSMutableDictionary alloc] init];
#pragma mark-----向字典里面添加键值对-----
[mDic setObject:@"翠花" forKey:@"name"];
NSLog(@"添加后%@",mDic[@"name"]);
// 在OC中,汉字处理有些异常
// 如果汉字放在数组和字典类中,直接整类打印,汉字以Unicode形式打印
// 如果取出之后打印,会以NSString字符串的形式打印
#pragma mark-----向可变字典中删除一个键值对-----
// [mDic removeObjectForKey:@"name"];
// NSLog(@"删除后%@ %@",@"name",mDic[@"name"]);
#pragma mark-----修改可变字典中的键值对-----
[mDic setObject:@"西门庆" forKey:@"name"];
NSLog(@"修改%@ %@",@"name",mDic[@"name"]);
#pragma mark-----删除全部-----
[mDic removeAllObjects];
NSLog(@"全部删除%@",mDic);
// 用字典表示一个区的名字和人口数
NSMutableDictionary *district = [[NSMutableDictionary alloc]init];
[district setObject:@"districtName" forKey:@"name"];
[district setObject:@"personNumber" forKey:@"number"];
NSLog(@"%@",district);
// 用字典表示一个城市的名字和市区名
NSDictionary *city = @{
@"cityname":@"district"
};
NSLog(@"%@",city);
#pragma mark-----集合-----
/*
集合:NSSet
特点:
1.集合是乱序的
2.集合中的元素是不重复的
*/
#pragma mark-----集合的初始化-----
NSSet *set = [NSSet setWithObjects:@"zhaobenshan",@"zhaosi",@"xiaobao",@"liuneng",nil];
// 集合没有字面量
#pragma mark-----打印集合元素的个数-----
NSLog(@"%lu",[set count]);
#pragma marl-----打印集合中是否包含某个元素-----
NSLog(@"%d",[set containsObject:@"xiaobao"]);
#pragma mark-----返回集合中的任意一个元素-----
NSLog(@"%@",[set anyObject]);
#pragma mark-----返回集合中的所有元素-----
NSLog(@"%@",[set allObjects]);/*(
zhaobenshan,
xiaobao,
liuneng,
zhaosi
)*/
NSLog(@"%@",set);/*{(
zhaobenshan,
xiaobao,
liuneng,
zhaosi
)}*/
#pragma mark-----可变集合-----
// NSMutableSet *set1 = set.mutableCopy;
// 创建一个空的集合
NSMutableSet *set2 = [NSMutableSet set];
#pragma mark-----给集合添加元素-----
[set2 addObject:@"wangdachui"];
NSArray *arr = @[@"zhaotiedan",@"gangdan"];
[set2 addObject:@"wangdachui"];//利用set的不重复性,可以实现数组元素的去重
[set2 addObjectsFromArray:arr];
NSLog(@"添加后%@",[set2 allObjects]);
// NSMutableArray *arr = [[NSMutableArray alloc]initWithArray:@[@"zhaotiedan",@"gangdan"]];
#pragma mark-----删除元素-----
[set2 removeObject:@"wangdachui"];
NSLog(@"%@",[set2 allObjects]);
#pragma mark-----带计数的集合-----
/*
带计数的集合,因为集合重复添加只保留一个,OC就提供了一个集合类,可以统计每个元素重复的次数
*/
NSCountedSet *cSet = [NSCountedSet set];
[cSet addObject:@"shanyang"];
[cSet addObject:@"xiaoshengyang"];
[cSet addObject:@"shanyang"];
NSLog(@"%@",[cSet allObjects]);/*(
xiaoshengyang,
shanyang
)*/
NSLog(@"shanyang出现次数:%ld",[cSet countForObject:@"shanyang"]);//shanyang出现次数:2
// NSCountedSet 是继承与NSMutableSet的,所有的可变集合中的方法都可以使用
#pragma mark-----快速遍历-----
// 增强for循环
// for in
// 第一个参数:是每一个元素的类型;
// 第二个参数:是用什么来代表这个元素;
// 第三个参数:所有的元素都放在哪;
// for (<#type *object#> in <#collection#>) {
// <#statements#>
// }
// 快速遍历数组
NSArray *aa = @[@"tiedan",@"gangdan",@"yadna",@"jidan"];
for (NSString *str in aa) {
NSLog(@"%@",str);
}
NSLog(@"快速遍历字典");
// 快速遍历字典
NSDictionary *dic12 = @{
@"name1":@"tiedan",
@"name2":@"gangdan",
@"name3":@"tiechui"
};
for (NSSet *s in dic12) {
NSLog(@"%@ %@",s,dic12[s]);
}
// for (NSSet *str in cSet) {
// if ([str isEqualToSet:@"shanyang"]) {
// NSLog(@"有");
// }
// }
return 0;
}

浙公网安备 33010602011771号