您的位置:首页 > 其它

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

2015-08-21 18:09 375 查看
集合有三种 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
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: