数组:按照顺序排列的元素的集合;
数组通过下标即索引取值;
NSArray 里面的元素按顺序排列的数组,在OC中允许在数组里存放不同数据类型的元素,在取值时注意数据类型 尽量存相同数据类型;
#pragma mark ---初始化数组的三种方法----
/*
// 初始化数组 1.在数组里面存的都是 NSObject 类型的数据,直接给数组赋值,如下:
// 数组里可以盛放任何object数据(字符串,数组),除了基本数据类型
NSArray *list = @[@"11",@"222",@"33"];//存放的是字符串
Hero *tooHao = [[Hero alloc]init];
Hero *jChuang = [[Hero alloc]init];
NSArray *list1 = @[tooHao,jChuang];//存放的是对象
// 2.定义空的数组
NSArray *list2 = [[NSArray alloc]init];//空的数组,可以直接给数组赋值数组
// 3.定义空的数组
NSArray *list3 = [NSArray array];//空的数组
// 3.初始化并且赋值
// (1) 初始化 只有一个元素的数组
NSArray *list = [NSArray arrayWithObject:@".."];
// (2)初始化 多个元素的数组 {“, nil” 逗号和nil不可省略}
NSArray *list1 = [NSArray arrayWithObjects:@"",@""... , nil];
*/
// 基本数据类型怎么存到 数组
// NSNumber 把数字类型的变量 包成 NSObject类型
// ?????数字转 NSNumber ?????
// **********在存放 数字到数组 的时候,不可以直接存放非 NSObject 类型的数据**********
// 可以把数字转化成 NSNumber类型,如下
/* int a = 100;
// NSNumber *num = [[NSNumber alloc]initWithInt:a];或者如下
NSNumber *num = [NSNumber numberWithInt:a];
// 转NSNumber类型的缩写 : @(要转的数据)
NSArray *list2 = @[@(a),@(0.98)];
// 或者 NSArray *list2 = @[num];
// 1.从数组里取值,根据下标,从0开始
// NSNumber *num0= list2[0];或者
int num0 = [list2[0] intValue];
NSArray *list = @[@"lucy",@"lily",@"lilei",@"hanmeimei"];
// 2.通过方法取值objectAtIndex
// NSString *s = [list objectAtIndex:0];
for (int i=0; i<list.count; i++) {
NSLog(@"%@",[list objectAtIndex:i]);
// 和NSLog(@"%@",list[i]);一样
}
// NSLog(@"%@",s);
// 数组元素是用,隔开的,NSLog的也是这样显示的
// (
// lucy,
// lily,
// lilei,
// hanmeimei
// )
*/
/*
NSArray *list = @[@"胜杰",@"景阔",@"威振",@"世申",@"张磊",];
// 取值:数组名【下标】
// NSString *sb = list[0];
#pragma mark ---获得数组长度即元素个数的属性:count;使用时:数组名.count---
for (int i=0; i<list.count; i++) {
NSString *s = list[i];
NSLog(@"%@",s);
}
#pragma mark ---快速遍历,打个 forin------
for (元素类名 *对象名 in 数组名) {
对象名
}
// for (NSString *s in list) {
NSLog(@"%@",s);
// }
// */
/**//*
Hero *h1 = [[Hero alloc]init];
Hero *h2 = [[Hero alloc]init];
NSString *list = @[h1,h2];
// for (Hero *h in list) {//这方法是错误的
// NSLog(@"%@",h);
// }
*/
#pragma mark 字符串 可以直接通过符号 截取字符串 变为数组;
/* NSString *content = @"葫芦娃!小明,老王,大黄";
NSArray *list = [content componentsSeparatedByString:@"!"];
// @"!"只是通过 !把字符串分隔开,!没用,其它所有符号都可以;中英文符号所占的字节数不一样,所以要区分
for (NSString *s in list) {
NSLog(@"%@",s);
}
*/
#pragma mark ---数组 里面可以直接通过 符号 转变为 字符串;(没有实现????)
// NSArray *list = @[@"小明",@"小红",@"小蒙"];
直接格式化,数组会保持原始形态
// NSString *s =[NSString stringWithFormat:@"%@",list];
// NSLog(@"%@",s);
// 可以使用 componentsJoinedByString加入一个字符串去分割数组里的元素
// NSString *s = [list componentsJoinedByString:@"!"];
// NSLog(@"%@",s);
#pragma mark ---可变数组——---
/*
// NSMutableArray
// 不可直接给 可变数组 赋值,和可变字符串一样,但可以如下:
NSMutableArray *list = [NSMutableArray arrayWithArray:@[@"",@""]];//也可以用下面方法
// NSArray *arr = @[@"",@""];
// NSMutableArray *list = [NSMutableArray arrayWithArray:arr];
NSString *s1 = @"";
NSString *s2 = @"";
NSMutableString *s = [NSMutableString stringWithFormat:@"%@%@",s1,s2];
// 不可变数组里面 所有方法 可变数组都可用
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"",@"", nil];
*/
#pragma mark ---可变数组的增 删 改 查----
// 定义一个空数组
// NSMutableArray *list = [NSMutableArray array];
1.添加元素
//
// Hero *hero = [[Hero alloc]init];
//
给英雄赋值的过程...
添加一个object类型的元素
// [list addObject:hero];
// NSLog(@"%lu",list.count);
// [list addObject:hero];
// NSLog(@"%lu",list.count);
//*****有一次alloc init就会创建一个对象
// for (int i=0; i<10; i++) {
// Hero *hero = [[Hero alloc]init];
// [list addObject:hero];
// }
// NSLog(@"%@",list);
NSMutableArray *list = [NSMutableArray arrayWithObjects:@"lucy", @"hanmeimei",@"tom",nil];
// 删除指定元素,可以 通过 下标 来删除;
// [list removeObject:1];
// 删除指定范围的元素
// NSRange range = {0,2};
// [list removeObjectsInRange:range];
// NSLog(@"%@",list);
// 移除最后一个元素
// [list removeLastObject];
// 移除全部元素
// [list removeAllObjects];
// 对数组进行 操作 时注意 数组越界
// 替换
// [list replaceObjectAtIndex:2 withObject:@"shengjie"];
// NSLog(@"%@",list);
// 通过元素 查找元素所在位置
NSString *name = @"tom";
// NSUInteger相当于无符号的int类型,输出格式为 %lu
// 通过下标替换一个元素,即查找元素位置
NSUInteger i = [list indexOfObject:name];
NSLog(@"%lu",i);