昨天东西没讲完,补在今天了
//
// main.m
// 第四周第四天OC第五讲
//
// Created by scjy on 15/11/5.
// Copyright (c) 2015年第四周. All rights reserved.
//
// 第四周第三天OC第四讲
// 字典类 {集合类 数组,字典,集合的快速遍历 数组排序}
#import <Foundation/Foundation.h>
int main(int argc,constchar * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
//字典类
/*
字典用于保存具有映射关系(key-value)的数据集合
对于name:张三来讲,name就是key,key对应的value就是张三
一个key-value的组合被认为是一个条目,字典是存储key-value对容器
字典类的特点:
与数组不同,字典靠key存取元素(数组是通过下标来存取元素)
key不能重复,value必须是对象(如果不是对象用 NSNumber,NSValue)
键值对在字典中是无序存储的
字典也分可变字典和不可变字典
不可变字典:字典一旦创建,键值不能更改,不可添加,不可删除,仅能读取key或value
可变字典:字典创建后,键值可以更改,可以添加,可以删除,也能读取key或value
字典中元素是成对出现的,不能出现单数个(键值对键值对,有键有值是一对)
吃饭睡觉打键盘
*/
//创建字典 NSDictionary
// NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:
// @"BenZ",@"car1",
// @"zhang",@"car2",
// @"吃饭",@"car3",
// @"睡觉",@"car4",
// @"打豆豆",@"car5",
// @"其实是打键盘",@"car6",nil];
// //获取字典元素个数
// NSUInteger count = dic.count;
// NSLog(@"count = %lu",count);
//
////获取所有key值
// NSArray *allkeyArray = dic.allKeys;
//
// for (int i = 0; i<allkeyArray.count; i++) {
// NSLog(@"allkeyArray[%d] = %@",i,[allkeyArray objectAtIndex:i]);
// }
// // NSLog (@"%@",[dic allKeys]);
//
//
////获取所有value值
// NSArray *allvaluesArray = dic.allValues;
//
// for (int i = 0; i<allvaluesArray.count; i++) {
// NSLog(@"allvaluesArray[%d] = %@",i,[allvaluesArray objectAtIndex:i]);
// }
// NSLog (@"%@",[dic allValues]);
//
//
// //通过key查询value值
// NSString *car1 = [dic valueForKey:@"car1"];
// NSLog(@"car = %@",car1);
//
// NSString *car2 = [dic valueForKey:@"car2"];
// NSLog(@"car = %@",car2);
//
//可变字典
// 初始化方法
// NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
// @"BenZ",@"car1",
// @"zhang",@"car2",
// @"吃饭",@"car3",
// @"睡觉",@"car4",
// @"打豆豆",@"car5",
// @"其实是打键盘",@"car6",nil];
//使用已经存在的不可变字典初始化一个新的可变字典
// NSMutableDictionary *mDic1 = [[NSMutableDictionary alloc]initWithDictionary:dic];
//
// //使用便利构造器方法创建一个新的空的可变字典
// NSMutableDictionary *mDic2 = [NSMutableDictionary dictionary];
//
//增删改
// //添加键值对
// //高冷是key,逗比是value
// [mDictionary setObject:@"doubi" forKey:@"gaoleng"];
// NSLog(@"%@",mDictionary);
//修改key对应的value
// [mDictionary setObject:@"shifou" forKeyedSubscript:@"car2"];
// NSLog(@"%@",mDictionary);
//
// [mDictionary setObject:@"shifou" forKeyedSubscript:@"car7"];
// NSLog(@"%@",mDictionary);
//
// //setValue: forValue:什么时候添加键值对,什么时候修改键值对?
// //当字典中没有这个key的时候,setValue: forValue:就是添加新的键值对
// //当字典中有这个key的时候,setValue: forValue:就是修改当前key对应的Value值
//
//
// //删除键值对
// [mDictionary removeObjectForKey:@"car3"];
// NSLog(@"%@",mDictionary);
// //遍历键值对
// NSArray *array10=[mDictionary allKeys];
// for (int i=0; i<array10.count; i++) {
// NSLog(@"%@ %@",[mDictionary valueForKey:array10[i]], array10[i]);
// }
//遍历键值对方法2
// NSArray *keyarray = [mDictionary allKeys];
// for (int j = 0; j<keyarray.count; j++) {
// NSLog(@"key = %@ value = %@",keyarray[j],[mDictionary valueForKey:keyarray[j]]);
// }
//
//可以同时删除多个键值对方法
// NSArray *arrayKeys=[NSArray arrayWithObjects:@"car3",@"car4",@"car5",@"car6", nil];
// [mDictionary removeObjectsForKeys:arrayKeys];
// NSLog(@"%@",mDictionary);
//创建字典,里边包含班级的各个小组,每个小组中又包含这组所有成员的名字。
//创建班级字典
//老师的程序
// NSMutableArray *group1 = [[NSMutableArray alloc] initWithObjects:@"小敏",@"王雪娟",@"郭飞飞",@"秦俊珍", nil];
// NSMutableArray *group2 = [[NSMutableArray alloc] initWithObjects:@"范芳芳",@"刘海燕",@"张衡",@"李书明", nil];
// NSMutableArray *group3 = [[NSMutableArray alloc] initWithObjects:@"佳慧",@"张鹏飞",@"乔自朋",@"*鹏" ,nil];
// NSMutableArray *group4 =[[NSMutableArray alloc] initWithObjects:@"韩苇棋",@"练晓俊",@"郭亚茹",@"马娟娟" ,nil];
// NSMutableDictionary *class = [[NSMutableDictionary alloc] init];
// [class setValue:group1 forKey:@"第一组"];
// [class setValue:group2 forKey:@"第二组"];
// [class setValue:group3 forKey:@"第三组"];
// [class setValue:group4 forKey:@"第四组"];
// NSArray *class1 = [class allKeys];
// for (int i = 0; i < class1.count; i++) {
// //通过key值取出字典里对应的value(各小组数据)
// NSArray *groupArray = [class valueForKey:class1[i]];
// for (int j = 0; j < groupArray.count; j++) {
// //通过下标访问数组里面的每一个元素
// if (j < groupArray.count) { //防止数组越界访问,导致程序崩溃,只有j小于数组元素时候才能去访问数组元素
//
// NSLog(@"%@ %@", class1[i],groupArray[j]);
// }
//
// }
//
// }
//
//张鹏飞的程序:
// NSArray *team=[[NSArray alloc]initWithObjects:@"team1",@"team2",@"team3",@"team4", nil];
// NSArray *Members=[[NSArray alloc]initWithObjects:nil];
// NSLog(@"小组:..");
// for (int i=0; i<team.count; i++) {
// NSMutableDictionary *group1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:team[i],@"小组1", nil];
// NSLog(@"%@",[group1 valueForKey:@"小组1"]);
// }
// for (int i=0; i<Members.count; i++) {
// NSMutableDictionary *group1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:Members[i],@"小组1", nil];
// NSLog(@"%@",[group1 valueForKey:@"小组1"]);
// }
//郭亚茹的程序
// NSArray *x = [[NSArray alloc] initWithObjects:@"妮妮",@"露露",@"小花", nil];
// NSArray *x1 = [[NSArray alloc] initWithObjects:@"妮可妮",@"露可露",@"小可花", nil];
// NSArray *x2 = [[NSArray alloc] initWithObjects:@"妮啦妮",@"露啦露",@"小啦花", nil];
//
//
// NSMutableDictionary *class = [[NSMutableDictionary alloc] initWithObjectsAndKeys:x,@"小花组",x1,@"可可组",x2,@"啦啦组", nil];
//
// NSArray *allkey1= [class allKeys];
// for (int j=0; j <allkey1.count; j++) {
// for ( int i =0; i < x.count; i++) {
// NSLog(@"key = %@ ,value= %@ ",allkey1[j],[[class valueForKey:allkey1[j]] objectAtIndex:i]);
// }
//
// }
//
/*******************从网上找的,是正确的*******************
// //向字典中添加value和key
// [mDictionary setValue:@"valueZHI" forKey:@"keyZHI"];
// NSLog(@"%@",mDictionary);
//
// //向一个字典中添加一个字典
//
// NSDictionary *dict4=[NSDictionary dictionaryWithObject:@"value6" forKey:@"key6"];
// [mDictionary addEntriesFromDictionary:dict4];
// NSLog(@"%@",mDictionary);
//
// //向字典中添加value和key
// [mDictionary setValue:@"valueZHI" forKey:@"keyZHI"];
// NSLog(@"%@",mDictionary);
//
//
// //删除元素
//
// //移除指定key的value值
// [mDictionary removeObjectForKey:@"car1"];
// NSLog(@"%@",mDictionary);
//
//
// //删除一组key的value值
// NSArray *arrayKeys=[NSArray arrayWithObjects:@"car1",@"car2",@"car3", nil];
// [mDictionary removeObjectsForKeys:arrayKeys];
// NSLog(@"%@",mDictionary);
**************************************/
//改动元素
//集合//
/*
iOS中也有表示数学中集合的类,叫做NSSet
特点:存储的元素唯一,元素无序,元素必须是对象类型(如果是基本数据类型需要通过NSNumber,NSValue转化为对象类型),iOS中用set表示集合,分NSSet和NSMutableSet
*/
// NSSet *set = [[NSSet alloc]initWithObjects:@"史蒂夫",@"保罗",@"乔布斯",@"求知若饥",@"虚心若愚",@"Steve",@"Jobs", nil];
//
// //获取集合元素个数,重复的元素会被覆盖,只算一个
// NSLog(@"set.count = %lu",set.count);
//// NSLog(@set.count = "%lu",(unsigned long)set.count);
//
// //获取集合值某个对象,有的话输出,没的话为空
// NSString *name = [set member:@"Jobs"];
// NSLog(@"name = %@",name);
//
// //判断集合中是否有某个对象
// BOOL isHaveChen = [set containsObject:@"Jobs"];
// NSLog(@"%d",isHaveChen);
//
// BOOL isHavejiao = [set containsObject:@"阿娇"];
// NSLog(@"%d",isHavejiao);
//allObjects返回集合中所有的元素
// NSArray *allObjArray = [set allObjects];
// for (int = 0; i<allObjArray.count; i++) {
// NSLog(@"%@",allObjArray[i]);
// }
//anyObject返回集合中一个元素,(第一次是随机的,以后每次都返回这个)
// NSLog(@"anyObject=====%@",[set anyObject]);
//
//
// /****NSMutableSet****/
// NSMutableSet *must = [[NSMutableSet alloc]initWithObjects:@"123",@"456",@"789",@"000", nil];
//
// //添加元素
// [must addObject:@"jjjj"];
// //删除
// [must removeObject:@"123"];
/****NSCountedSet****/
// NSCountedSet *countSet = [[NSCountedSet alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0",@"1",@"1",@"1", nil];
//
// NSLog(@"count ===== %lu",countSet.count);
//countForObject计算某个元素在集合内出现的次数
// NSInteger ajcount = [countSet countForObject:@"1"];
// NSLog(@"count = %lu",ajcount);
// //集合类型的快速枚举
// NSArray *quickArray = [NSArray arrayWithObjects:@"zhao",@"qian",@"sun",@"li",@"zhou",@"wu",@"zheng",@"wang",nil];
//
// //右边是集合,左边是集合中元素的类型(类型?觉得是列举出来的元素吧)
// for (NSString *strobj in quickArray) {
// NSLog(@"strobj = %@",strobj);
// }
//
// //字典的快速枚举
// NSDictionary *quickdic = [NSDictionary dictionaryWithObjectsAndKeys:@"feng",@"chen",@"chu",@"wei",@"jiang",@"shen",@"han",@"yang", nil];
// //右边是被枚举的对象,左边是枚举出来对象的类型(同上)
// for (NSString *aaa in quickdic) {
// NSLog(@"aaa = %@",aaa);//(aaa就是key)
// NSLog(@"value = %@",[quickdic valueForKey:aaa]);
// }
// //对比,用for循环输出字典key值
// NSArray *quickkeys = quickdic.allKeys;
// for (int i = 0; i < quickkeys.count; i++) {
// NSLog(@"aaa ====== %@",[quickkeys objectAtIndex:i]);
// }
//
// //快速枚举集合
//
// NSSet *quickset = [NSSet setWithObjects:@"zhu",@"qin",@"you",@"xu", nil];
// for (NSString *strobj in quickset) {
// NSLog(@"strobj = %@",strobj);
// }
//
// //问题:假如一个不知道类型和元素个数的集合,如何快速枚举
// for (id obj in quickset) {//id可代指所有对象类型,不具体指哪一种,格式转化符:%@。
// NSLog(@"%@",obj);
// }
//
/********数组排序*********/
//冒泡排序
//之C语言
int count;
int a[10]={};
for (int i = 0; i<10; i++) {
a[i]=arc4random()%(30-10+1)+10;
}
count = sizeof(a)%sizeof(5);
for (int i=0; i<9; i++) {
for (int j=0; j<9-i; j++) {
int n;
if (a[j] > a[j+1]) {
n = a[j];
a[j]=a[j+1];
a[j+1]=n;
}
}
}
for (int i=0; i<10; i++) {
NSLog(@"a[%d]=%d",i,a[i]);
}
//OC数组的排序
/*通过OC数组冒泡排序,数组元素是整形的值*/
NSMutableArray *sortarray = [NSMutableArrayarrayWithObjects:
[NSNumbernumberWithInt:0] ,
[NSNumbernumberWithInt:1],
[NSNumbernumberWithInt:2],
[NSNumbernumberWithInt:8],
[NSNumbernumberWithInt:10],
[NSNumbernumberWithInt:16],
[NSNumbernumberWithInt:128],
[NSNumbernumberWithInt:256],
[NSNumbernumberWithInt:512],
[NSNumbernumberWithInt:1024],nil];
for (int i = 0; i<sortarray.count - 1; i++) {
for (int j= 0; j<sortarray.count - 1-i; j++) {
//1
NSNumber *num1 = [sortarrayobjectAtIndex:j];
int numInt1 = [num1intValue];
NSNumber *num2 = [sortarrayobjectAtIndex:j];
int numInt2 = [num2intValue];
if (numInt1>numInt2) {
[sortarray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
//2简化写法
/*
if ([sortarray[j] intValue] > [sortarray[j+1] intValue]) {
[sortarray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
*/
}
}
// for (int i=0; i<10; i++) {
// NSLog(@"a[%d]=%d",i,a[i]);
// }
//练习作业
// 定义一个数组,数组中是student对象,快速遍历,选出所有女生,添加到一个新的数组中。
// 定义一个字典,字典是一个学生的信息:姓名、年龄、学号、地址.通过遍历显示学生的所有信息
}
return 0;
}