码迷,mamicode.com
首页 > 其他好文 > 详细

5.集合

时间:2016-02-17 20:57:43      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:

数组是一个有序的集合,OC中的数组只能存储对象类型,数组可以存放不同类型的对象,但存放进去的必须是对象(带*)

创建一个不可变数组:NSArray
1、初始化方法
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"zhonger", @"honghuang", @"taixu", @"zhili", nil];
NSLog(@"array is %@",arr1);
nil 不是对象,只是标记,告诉编译器数组赋值结束
如果数组赋的值是汉字,那么打印的是汉字对应的unicode编码,输出的数组里的元素用()包含

2、便利构造器
NSArray *arr2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"qianyao",@"linlin", nil];
NSLog(@"arr2 is %@",arr2);

3、字面量,@[],这种写法只能是不可变数组
NSArray *arr3 = @[@"shuishen", @"huangshenme", @"youyisi", @"qiuxiang", @12];

数组两个核心方法(原始方法)count objectAtIndex
count  求数组元素个数  无符号长整型
unsigned long count = [arr1 count];
NSLog(@"arr1‘s count is %lu",count);

objectAtIndex 通过给定的下标找到对应的元素
NSString *bada = [arr2 objectAtIndex:1];
NSLog(@"bada is %@",bada);

遍历数组(for循环)
for (int i = 0; i < [arr3 count]; i ++) {
        NSLog(@"arr3[%d] = %@", i, arr3[i]);//语法糖
    }

不可变数组方法:
①判断数组中是否包含某个元素:containsObject
②获取某个元素所在的数组下标:indexOfObject,lastObject,firstObject
③数组和字符串之间的转换:
分割字符串:
NSString *str = @"zhonger m 19 f";
NSArray *resultArr = [str componentsSeparatedByString:@" "];
NSLog(@"resultArr is %@",resultArr);

拼接字符串:
NSArray *arr = @[@"方婷婷", @"李旭华", @"郑佩思", @"吴枝静",@"王越亚"];
NSString *newStr = [arr componentsJoinedByString:@"??"];
NSLog(@"newStr is %@",newStr);

创建一个可变数组:NSMutableArray
NSMutableArray的父类是NSArray,具有NSArray所有的方法,同时添加了对自身对象增删改的操作

1、初始化方法、便利构造器方法
NSMutableArray *mArr = [[NSMutableArray alloc] initWithCapacity:0];
NSMutableArray *mArr1= [NSMutableArray arrayWithCapacity:0];

2、字面量的创建方式,创建不可变数组,然后拷贝给可变的数组mutableCopy
NSMutableArray *mArr2 = [@[@"ftt", @"lxu", @"zps", @"wzj",@"wyy"] mutableCopy];

可变数组的增删改方法
①向数组中添加元素:addObject
[mArr addObject:@122];
NSLog(@"mArr is %@",mArr);
②向数组的指定位置插入一个新的元素
[mArr2 insertObject:@"pbx" atIndex:3];
NSLog(@"mArr2 is %@",mArr2);
③移除数组中某个元素
1、删除指定元素 removeObject
[mArr2 removeObject:@"pbx"];
2、删除某个下标的元素 removeObjectAtIndex
[mArr2 removeObjectAtIndex:3];
3、删除数组中最后一个元素 removeLastObject
[mArr2 removeLastObject];
4、删除数组中所有元素 removeAllObject
[mArr2 removeAllObjects];
④根据下标替换数组中的元素replaceObjectAtIndex: withObject:
[mArr2 replaceObjectAtIndex:0 withObject:@"lxh"];
⑤根据下标交换数组中两个元素的位置
[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];

数组打印(value1,value2,…value)


字典是一个无序的集合,用来存储具有一一对应关系的数据
字典中存储的每一个对象都是一对键值对,键值对包含两个部分key和value,key和value的值都是对象类型,对于每一对key-value称为一个条目(Entry)

注意:
字典与数组不同,字典靠key存取元素,key是唯一的
key与value必须都是对象类型
字典中键值对的存储是无序的
字典也分为两种:不可变字典NSDictionary、可变字典NSMutableDictionary

创建一个不可变字典
1、初始化方法   initWithObjectsAndKeys:先给value再给key
NSDictionary *Dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhanger", @"name1",@"taixu", @"name2", @"caicai", @"name3", nil];           
2、便利构造器方法
①dictionaryWithObjectsAndKeys:也是先给value再给key
NSDictionary *Dic = [NSDictionary dictionaryWithObjectsAndKeys:@"zhanger", @"name1",@"taixu", @"name2", @"caicai", @"name3", nil];
②dictionaryWithObject: forKeys:
NSDictionary *Dic2 = [NSDictionary dictionaryWithObjects:@[@"linlin",@"qiuxiang",@"huanghuang"] forKeys:@[@"shuaige",@"meinv",@"hehe"]];
3、字面量 先写key,在写value,键值之间用冒号相隔,一对键值与一对键值之间逗号隔开,使用@{}
NSDictionary *Dic3 = @{@"1":@"zuizui",@"2":@"fufu",@"3":@"ganggang"};

可变字典的方法
①获取字典中键值对的个数count,以及获取所有的key allKeys 所有的value allValues
NSUInteger count = [Dic3 count];
NSLog(@"count is %lu",count);
NSLog(@"allKeys is %@",[Dic3 allKeys]);
NSLog(@"allValues is %@",[Dic3 allValues]);
②通过key,获取字典中某个value值 objectForKey
NSString *resultStr = [Dic3 objectForKey:@"2"];
③根据key遍历字典
先将key取出,存放在数组中,在遍历
NSArray *allKey = [Dic3 allKeys];
for (int i = 0; i < [allKey count];  i ++) {
    NSLog(@"%@",[Dic3 objectForKey:allKey[i]]);
}
④增加键值对的方法  setObject:forKey:
[mdic2 setObject:@"lisi" forKey:@"key3"];
⑤删除键值对的方法  removeObjectForKey:   根据key删除一对键值对
[mdic2 removeObjectForKey:@"key1"];
⑥移除所有的键值对  removeAllObject
[mdic2 removeAllObjects];
⑦修改键值对,根据key来修改value,因为key是唯一的,不能重复,但value可以重复


集合分为不可变集合(NSSet)和可变集合(NSMutableSet)
集合的特点:
互异性:集合中不能够出现两个相同的对象
无序性:集合中没有顺序

1、初始化和遍历构造器,集合没有快速创建集合对象的字面量
NSSet *set = [[NSSet alloc] initWithObjects:@"zhonger", @"honghuang", @"taixu", @"fufu", @"bada", @"linlin", @"qianyao", nil];

NSSet *set1 = [NSSet setWithObjects:@"qiuxiang", @"ganggang", @"pengpeng", @"zuizui", @"hujiepei", @"zhuzhenjie", nil];

集合的方法:
①获取集合中对象的个数  count
②获取集合中所有的对象,保存在一个数组中  allObjects
③从集合中获取任意一个对象  anyObject
④判断集合中是否包含某个对象,返回的是BOOL  containsObject

计数集合 NSCountedSet  继承  NSMutableSet
记录每个对象在集合中出现的次数
记录某个对象出现的次数方法:countForObject


总结:
OC提供了三大容器:数组、字典和集合,三个容器中存储的都是对象类型
数组:是一个有序的集合,管理一个有序的一组对象时
字典:是一个无序的集合,里面存储的对象是一个个键值对,获取数据时需要使用对应的key来操作,并且key在字典中是唯一的
集合:是一个无序的容器,并且容器中的对象不能够重复
可变容器类对象是不可变容器类对象的子类,在拥有父类功能的基础上,扩充了对原有对象的增删改操作

5.集合

标签:

原文地址:http://www.cnblogs.com/aoliaoli/p/5196426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!