day5: 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序

集合有三种  NSArray NSDictionary NSSet
 NSArray:有序,元素可以重复,通过索引来访问里面的数据
 NSMutableArray: 通过索引来访问(读取与写入)里面的数据
 NSDictionary: 无序:指的是我们初始化时跟它的存储顺序是不一样的
               有序:key是按ACSII码表的顺序来存入的
 NSMutableDictionary:
 
 NSSet 无序,元素是不重复的,通过anyObject来访问一个元素,不是我们所能控制的
 NSMutableSet 添加和删除元素
 NSCountedSet 记录元素重复次数,最主要的功能是去除重复元素。
 
 NSArray NSDictionary 两个有语法糖
 NSSet 没有语法糖
 
 可变字典和不可变字典都是由键值对组成的数据集合,
 数组与字典的区别:
 相同点:
    都是数据集合
    都是有序集合
    不可变数组和不可变字典 都有语法糖
    数组:@[obj1,obj2,obj3]  字典:@{key1:value1,key2:value2}
 不同点:
    数组中元素可以重复,字典中key不可以重复,value可以重复;
    数组通过下标或值查找,字典通过key查找,
    数组值可以为空,字典对象键值不可以为空,如需加入控制可以加入NSNULL对象
 
 //-------不可变字典 NSDictionary--------
 不可变字典 NSDictionary
 字典的初始化1
 initWithObjectsAndKeys:
 字典的初始化2
 initWithObjects:forKeys:
 字典的初始化3
 dictionaryWithObjectsAndKeys:
 字典的初始化4
 dictionaryWithObjects:forKeys:
 获取所有的key
 allKeys
 获取所有的值value
 allValues
 
 //--------可变的字典  NSMutableDictionary--------
 可变字典的初始化
 dictionaryWithObjects:forKeys:
 修改键值对 和 添加键值对
 setObject:forkey:
 通过key来删除键值对
 removeObjectForKey
 删除字典里所有对象
 removeAllObjects
 
 //-------NSSet  NSMutableSet常用方法总结 ---------
 NSSet是一个无序集合 在内存中存储是不连续的,去除数组中重复元素
 NSSet与NSArray NSSet搜索元素比NSArray效率高,因为NSSet用到了Hash算法
 NSSet,NSArray都是类,只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。
 
 NSSet 常用方法总结
 +(id)setWithObjects:obj1,obj2,...nil     使用一组对象创建新的集合
 -(id)initWithObjects:obj1,obj2,....nil     使用一组对象初始化新分配的集合
 -(NSUInteger)count     返回集合成员个数
 -(BOOL)containsObject:obj     确定集合是否包含对象 obj
 -(BOOL)member:obj     确定集合是否包含对象 obj
 -(NSEnumerator*)objectEnumerator     返回集合中所有对象到一个 NSEnumerator 类型的对象
 -(BOOL)isSubsetOfSet:nsset     判断集合是否是NSSet的子集
 -(BOOL)intersectsSet:nsset     判断两个集合的交集是否至少存在一个元素
 -(BOOL)isEqualToSet:nsset     判断两个集合是否相等
 
 NSMutableSet 常用方法总结
 -(id)setWithCapcity:size     创建一个有size大小的新集合
 -(id)initWithCapcity:size     初始化一个新分配的集合,大小为size
 -(void)addObject:obj     添加对象 obj 到集合中
 -(void)removeobject:obj     从集合中删除对象 obj
 -(void)removeAllObjects     删除集合中所有对象
 -(void)unionSet:nsset     将nsset的所有元素添加到集合
 -(void)minusSet:nsset     从集合中去掉所有的NSSet 的元素
 -(void)interectSet:nsset     集合和NSSet 做交集运算


main.m

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    //
    //-------不可变字典 NSDictionary--------
    //字典的初始化1
    NSDictionary * dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"zhangsan",@"HighHeight",@"lisi",@"strongest", nil];
    NSLog(@"%@",dic1);
    
    //字典的初始化2
    NSDictionary * dic2 = [[NSDictionary alloc]initWithObjects:@[@"zhangsan",@"lisi"] forKeys:@[@"highHeight",@"strongest"] ];
    NSLog(@"%@",dic2);
    
    //字典的初始化3
    NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"highHeight",@"lisi",@"strongest", nil];
    NSLog(@"%@",dic3);
    
    //字典的初始化4
<pre name="code" class="objc">    //字典语法糖格式:@{key1:value1,key2:value2};


NSDictionary *parameters = @{@"1":@"2"} //@"1"是key, @"2"是value
NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:@[@"松下",@"仓井"] forKeys:@[@"Japan",@"World"]]; 
NSArray * keys = [dic4 allKeys]; //获取所有key 
NSArray * values = [dic4 allValues]; //获取所有value 
NSLog(@"%@ %@",keys,values); //字典对象只能读取,不能写入 
NSString *value2 = dic4[@"xa"]; 
NSLog(@"value2 = %@",value2); 
//dic4[@"xa"]=@"bobo"; //只能读,不能写 
//--------可变的字典 NSMutableDictionary-------- 
NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjects:@[@"kunlin",@"AngleBaby"] forKeys:@[@"jay",@"huangxiaomin"]]; 
NSLog(@"mDic = %@",mDic); 
/*setObject:forkey:修改键值对 和 添加键值对 添加键值对 (怎么样可以让数组里的汉子打印出来不是unicode码) 
如果key值在字典里没有就是添加; 如果key值在字典里存在,那么调用这个方法时就是修改。 */ 
[mDic setObject:@"naichamei" forKey:@"liuqiangdong"]; 
NSLog(@"mDic = %@",mDic); 
//removeObjectForKey 通过key来删除键值对 
[mDic removeObjectForKey:@"jay"]; 
NSLog(@"mDic = %@",mDic); 
//removeAllObjects 删除字典里所有对象
// [mDic removeAllObjects];
// NSLog(@"mDic = %@",mDic); 
//for循环 来遍历字典 
//遍历方法1:    
NSArray * keys2 = [mDic allKeys];    
for (int i=0; i<[keys2 count]; i++) {        
    NSString * key = keys2[i];        
    NSString * value = mDic[key];        
    NSLog(@"key = %@, value = %@",key,value);    
}    
//遍历方法2    
for (id obj in mDic) {        
    NSLog(@"key = %@ value = %@",obj,[mDic objectForKey:obj]);    
} 
//-------NSSet的常用方法 ------- // 
NSSet * set = [[NSSet alloc]initWithObjects:@"bobo",@"huihui",@"haohao", nil]; 
NSLog(@"set = %@",set); 
//类方法 NSSet * set2 = [NSSet setWithObjects:@"bobo",@"huihui",@"haohao", nil]; 
NSLog(@"set2 = %@",set2); 
//NSSet 对象中打印出来的内容不是我们所写的顺序 
//NSSet 存储是无序的 
//集合中元素是无需的 
//集合中元素的个数 
NSUInteger setCount = [set2 count]; 
NSLog(@"setCount = %ld",setCount); 
//获取元素 随机取出一个元素 
//anyObject 返回最方便取出的元素,不会保证是随机的 
NSString *nameStr = [set2 anyObject]; 
NSLog(@"nameStr = %@",nameStr); 
//是否包含某个对象 BOOL isContain = [set2 containsObject:@"haohao"]; 
NSLog(@"isContain = %d",isContain); 
//三种集合:NSLog输出格式 NSArray *arr = @[@"zero",@"hour"]; 
NSLog(@"arr = %@",arr); 
NSDictionary *dic = @{@"Japan":@"Songxia",@"World":@"WenHua"}; 
NSLog(@"dic = %@",dic); NSSet * set3 = [NSSet setWithObjects:@"US",@"UK",@"UB", nil]; 
NSLog(@"set3 = %@",set3); 
//--------NSMutableSet--------- 
NSMutableSet * mSet = [NSMutableSet setWithObjects:@"井上",@"田中",@"海里", nil]; 
//NSMutableSet所特有的消息 
//特性1、添加元素 [mSet addObject:@"松下"]; 
[mSet addObject:@"山本"]; 
[mSet addObject:@"柳下"]; 
NSLog(@"mSet = %@",mSet); 
//特性2、移除元素 [mSet removeObject:@"松下"]; 
NSLog(@"mSet = %@",mSet); 
//特性3、移除所有的元素 
[mSet removeAllObjects]; 
NSLog(@"mSet = %@",mSet); 
//去除数组中重复的元素 NSArray * arr2 = @[@"a",@"b",@"c",@"b",@"a",@"c",@"a",@"a",]; 
NSLog(@"arr2 = %@",arr2); NSSet * set4 = [NSSet setWithArray:arr2]; 
NSLog(@"set4 = %@",set4); NSArray * arr3 = [set4 allObjects]; 
NSLog(@"arr3 = %@",arr3); 
//--------NSCountedSet--------- //
setWithArray:统计数组中各元素的个数 NSCountedSet * countedSet = [NSCountedSet setWithArray:arr2]; 
NSLog(@"countedSet = %@",countedSet); 
//countForObject:返回集合中某元素的重复次数 
NSUInteger repeat = [countedSet countForObject:@"a"]; 
NSLog(@"repeat = %lu",repeat); 
//-------for in 快速枚举,快速遍历-------- 
//遍历1、遍历数组中的元素 
NSArray * arr5 = @[@"bobo",@"xiaocui",@"huihui"]; 
NSUInteger count = [arr5 count]; for (int i=0; i<count; i++) { NSLog(@"arr5 = %@",arr5[i]); } 
/* type 集合中的类型 object 实例变量名 collection 集合名 */ 
for (NSString * obj in arr5) { 
    NSLog(@"obj = %@",obj); 
} 
//遍历2、遍历字典中的元素 
NSDictionary * dic5 = @{@"天龙八部": @"萧峰",@"倚天屠龙记": @"张无忌",@"神雕侠侣": @"杨过",}; 
NSArray * keys3 = [dic5 allKeys]; NSUInteger count2 = [keys3 count]; 
for (int i=0;i<count2;i++) { 
    NSLog(@"%@ = %@",keys3[i],dic5[keys3[i]]); 
} 
for (NSString * obj in dic5) 
{ 
    NSLog(@"%@ = %@",obj,dic5[obj]); 
} 
//遍历3、用Block列举字典中所有的key和value 
[dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    NSLog(@"%@ = %@",key,obj); 
}]; 
NSMutableArray * names = [NSMutableArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu", nil]; 
//OC 数组升序排列:sortedArrayUsingSelector:@selector(compare:) 
NSArray * names2 = [names sortedArrayUsingSelector:@selector(compare:)];
NSUInteger count3 = [names count]; 
//第一层循环控制趟数 
for (NSUInteger i=0; i<count3-1; i++) { 
    for (NSUInteger j=0; j<count3-1-i; j++) { 
        if ([names[j] compare:names[j+1]]<0) { 
        [names exchangeObjectAtIndex:j withObjectAtIndex:j+1]; 
        } 
    } 
} 
for (NSUInteger i=0; i<count3; i++) { 
    NSLog(@"name = %@",names[i]); 
} 
for (NSUInteger i=0; i<count3; i++) { 
    NSLog(@"name = %@",names2[i]); 
} 
    return 0;
}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值