版权声明:本文为博主原创,如需转载请注明出处。
1 数组基本
1.1 创建数组
NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作
下面这种方式相当于什么都没做
1 | NSArray * array = [[NSArray alloc] init]; |
1.2 通过构造方法的方式创建一个NSArray
在创建一个NSArray的时候,集合的最后一个元素一定是nil
1 | NSArray * array1 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil]; |
1.3 数组中可以存储不同类型的对象
1 | NSNumber * number = [NSNumber numberWithInt:10]; |
1.4 数组实际上存储的是对象的地址,同样也可以存储数组的地址
1 | NSArray * a1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil]; |
1.5 存储自定义的对象
最好都 description 方法
1 | @interface Person : NSObject |
1 | @implementation Person |
1 | Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20]; |
1.6 数组中存储基本数据类型
如果你要在数组中存储基本数据类型,请包装好了之后在去存 NSNumber
注意不要把nil值存储到 NSArray 中,会导致数据丢失
1 | NSString * str = nil; |
1.7 创建数组的快捷方式
1 | NSArray * karray = @[@"a",@"b",@"c"]; |
1.8 快速获得一个数组中的元素
1 | NSString * kstr = karray[0]; |
1.9 从数组中取出数据
1 | NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil]; |
数组的index时从0开始的
1 | NSString * str = [array objectAtIndex:0]; |
1.10 获得数组的元素个数
1 | NSUInteger arrayCount = [array count]; |
1.11 判断数组中是否存在某个对象
1 | Person * p1 = [[Person alloc] initWithName:@"yofer" andAge:20]; |
2 遍历数组
2.1 使用for循环遍历数组
1 | NSArray * array = @[@"one",@"two",@"three"]; |
2.2 使用增强for循环的方式遍历数组
1 | for (NSString * str in array) |
2.3 注意事项
如果你的数组中村粗了多种不同类型的数据,那么最好不要调用某个对象特有的方法,会导致程序崩溃
在实际的开发中,一个数组往往只负责存储一种数据类型
1 | Person * p1 = [[Person alloc] init]; |
2.4 枚举器
1 | NSArray * array3 = @[@"one",@"two",@"three"]; |
3 数组排序
3.1 使用 sortedArrayUsingSelector
是最简单的排序方式
数组是按照你存入元素的顺序存储的
1 | NSArray * array = @[@"b",@"d",@"a",@"z"]; |
3.2 使用block方式排序
1 | NSArray * array2 = @[@"z",@"4",@"b",@"3",@"x"]; |
先给一个 Person 类
1 | @interface Person : NSObject |
1 |
|
3.3 定制化数组对象排序
1 | Person * p1 = [[Person alloc] initWithName:@"xiaozhe" andAge:20 andYear:@"1990"]; |
如果你向给你自己定义的对象排序,必须根据某一个属性来排序,
sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入
ascending YES表示正序 NO表示倒序
1 | NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO]; |
如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高
1 | NSArray * descripts = @[d2,d1]; |
结果:
1 | 2016-08-14 14:13:57.238 05-数组排序[2105:516991] array3 排序前 ( |
再次测试:
1 | NSArray * array4 = @[p1,p2,p3]; |
结果:
1 | 2016-08-14 14:13:57.238 05-数组排序[2105:516991] array4 排序前 ( |
4 可变数组: NSMutableArray
NSMutableArray 继承至 NSArray
4.1 创建可变数组
1 | NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0]; |
使用addObject 动态给数组中增加元素
1 | [array addObject:@"one"]; |
数组中可以存储,同一个对象多次
1 | [array addObject:str1]; |
4.2 指定对象插入的位置
1 | [array insertObject:str1 atIndex:2]; |
4.3 删除 会通过对象,删除数组中所有的同一个地址的对象
1 | [array removeObject:str1]; |
4.4 通过索引的方式删除对象,超出了数组的count值,那么就会导致异常 index beyond bounds
1 | [array removeObjectAtIndex:0]; |
4.5 删除数组中所有的元素
1 | [array removeAllObjects]; |
5 可变数组 NSMutableArray 遍历
5.1 for换遍历
1 | for (int i = 0; i < array.count; i++) |
5.2 增强for循环
1 | for (NSString * str in array) |
5.3 枚举器
1 | NSEnumerator * enumerator = [array objectEnumerator]; |
5.4 要通过遍历的方式确定删除哪个元素怎么办
1 | NSMutableArray * array2 = [[NSMutableArray alloc] init]; |
结果:
1 | 2016-08-14 14:35:20.437 06-可变数组[2252:538261] array2 ( |
遍历临时数组
1 | for (int i = 0; i < tmp.count; i++) |
新博客文章地址:NSArray/NSMutableArray创建,获取,遍历,排序
CSDN文章地址:NSArray/NSMutableArray创建,获取,遍历,排序