NSArray
放任何OC类的对象,不允许放基本数据类型,数组里面是id指针,id指针只能指向OC类的对象
1. 创建方法:(5)
NSArray *a = [NSArray array]; //调用工厂方法来初始化,空数组,没有任何意义
NSArray *a1 = [NSArray arrayWithObject:@"one"]; //只有一个元素的数组,意义不大,可以用一个对象就可以
NSArray *a2 = [NSArray arrayWithObjects:@"one", @"tow",@"three",nil]; //可以有多个元素,nil不可以丢,标志数组元素结束,就如/0一样
NSArray *a3 = @[@"one",@"tow",@"three"]; //优化后的方法,最常用
NSArray *a4 = [NSArray arrayWithArray:a3]; //生成副本
2. 数组的属性:
array.count //求数组元素个数
3. 根据下标取数组值:(单个)
NSString *str = [a4 objectAtIndex:2];//求数组指定下标对应的元素值 优化后可以用C中数组表示NSLog(@"%@", a4[2]);(越界就会导致程序崩溃)
str = [a4 lastObject]; =》 str = a4 [ a4. count -1 ] ; //取最后一个元素
str = [a4 firstObject]; =》 str = [a4 objectAtIndex:0]; //取第一个元素
4. 根据元素值求下标:
NSUInteger index = [a4 indexOfObject:@"three"]; //越界后就是一个无比大的值
防止越界:
if (index >= a4[a4.count - 1]) {
NSLog(@“元素不存在”);
}else{
NSLog(@"%lu", index);
}
5. 数组的遍历:(显示,满足条件输出。。。。)
NSLog(@"%@",array6); //直接输出
//面向过程(?还是对象)的循环,只用于遍历
for (NSString *s in array6) {
NSLog(@"%@", s);
}
//满足条件输出
NSArray *array6 = @[@"one",@"tow",@"three",@"one"];
for (NSString *str in array6) {
if ([str isEqualTo:@"one"] == YES) {
NSLog(@"%@", str);
}
}
6. 数组排序三部曲:
1. 创建数组:
NSArray *array = @[i1, i2, i3, i4, i5];
2. 写一个方法:实例方法
//格式,排序规则(声明并实现)
-(NSComparisonResult) compareInterger:(TRInterger *)other{ //枚举:NSComparisonResult,里面有3个参数
if ( self.interger > other.interger ) {
return NSOrderedAscending; //升序
}
else if ( self.interger < other.interger ){
return NSOrderedDescending; //降序
}
else{
return NSOrderedSame; //相等
}
}
3. 调用: //升序与降序完全取决于规则
NSArray *sorted = [array sortedArrayUsingSelector:@selector(compareInterger:)];
拼音排序:
(补充)
-(NSComparisonResult)compareName:(TRStudent *)other{
return [self.pinYin compare:other.pinYin]; // compare:调用方法
}
//转为拼音
NSMutableString *str = [NSMutableString stringWithString:@"计算机语言"];
if (CFStringTransform((__bridge CFMutableStringRef)str, 0, kCFStringTransformMandarinLatin, NO))
{
NSLog(@"%@", str);
}
if (CFStringTransform((__bridge CFMutableStringRef)str, 0, kCFStringTransformStripDiacritics, NO))
{
NSLog(@"%@", str);
}
副本当中的数组元素,深浅拷贝生成方法:采纳协议<NScoping>
NSArray *copid = [[NSArray alloc] initWithArray:stu copyItems:NO]; //NO表示是引用计数拷贝 //YES表示深拷贝
NSMutableArray:
可变数组,是NSArray的子类
1. 创建:(堆上)
NSMutableArray *array1 =[NSMutableArray array];
NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:100]; //预估值
NSMutableArray *array3 = @[@"one", @"tow"]; //退化为NSArray
NSMutableArray *array4 = [NSMutableArray arrayWithObjects: @"one", @"tow", @"three",nil]; //最常用,不可少nil
2.添加(元素)方法 :
[array4 addObject:@"six"]; //末尾添加
[array4 insertObject:@"fine" atIndex:2]; //指定下标处添加
3. 修改(元素)方法:
[array4 replaceObjectAtIndex:0 withObject:@"NO"]; //指定下标修改
批量修改:
NSArray *replace = @[@"five", @"six", @"seven"];
[array4 replaceObjectsInRange:NSMakeRange(1, 2) withObjectsFromArray:replace];
4. 删除:
[array4 removeLastObject]; //删除最后一个元素
[array4 removeObjectAtIndex:0]; //删除下标元素
[array4 removeObject:@"six"]; //删除元素
[array4 removeObjectsInRange:NSMakeRange(0, 2)]; //指定范围删除
NSArray *del = @[@"five", @"three"];
[array4 removeObjectsInArray:del]; //删除不连续元素
[array4 removeAllObjects]; //清空数组
注意:
//不能一次遍历
for (NSArray *college in school) {
for ( NSArray *class in college) {
for (TRStudent *stu in class) {
//if(stu.age >=20)
NSLog(@"%@", stu);
}
}
}
//数组遍历过程中 删除元素 会有元素遍历不到(丢元素)
NSMutableArray *mArray = [@[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10] mutableCopy];
for (NSInteger i = 0; i < mArray.count; i++) {
static int index = 0;
NSLog(@"------ %d",++index);
[mArray removeObjectAtIndex:i];
}
NSLog(@"mArray = %@",mArray);