// 数组 (NSArray)
// 系统提供的数组类 -- 类似于c语言中的数组
// OC中的数组是个大容器,可以存放不同类型的对象, 且只能保存对象(基本数据类型不可存)
// OC数组提供两类数组 NSArray(不可变数组) NSMUatableArray (可变数组)
// 可变与不可变区别:
// 可变意味着对原有的对象进行曾删改操作, 而不可变就意味着数组一经创建不能修改
// 1. 创建对象
#if 0
// 1). 初始化方法
NSArray *array = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil];
NSLog(@"%@", array);
NSArray *array1 = [[NSArray alloc] initWithArray:array];
NSLog(@"%@", array1);
// 2). 便利方法
NSArray *arr = [[NSArray alloc] initWithObjects:@"sdfg", @"gfg", @"fsf", nil];
NSArray *arr1 = [NSArray arrayWithArray:arr];
NSArray *arr2 = [[NSArray alloc] initWithArray:arr1];
// 初始化一个元素
NSArray *arr3 = [NSArray arrayWithObject:@"123"];
NSArray *array3 = [NSArray arrayWithObjects:@"aa", @"bb", @"cc", nil];
NSLog(@"%@", array3);
NSArray *array4 = [NSArray arrayWithArray:array1];
NSLog(@"%@", array4);
// 3). 字面量(用于不可变得量)
NSArray *array6 = @[@"1", @"2", @"3"];
// 2. 获取数组元素个数
NSLog(@"%lu", array.count);
// 3. 获取数组中的元素
// 1). 给定位置获取元素
NSLog(@"%@", [array objectAtIndex:2]);
//6 NSLog(@"%@", [array objectAtIndexedSubscript:2]);
// 2). 第一个元素
NSLog(@"%@", array.firstObject);
// 3). 最后一个元素
NSLog(@"%@", [array lastObject]);
// 4. 根据元素获取元素所在数组中对应的索引(下标)
NSLog(@"%ld", [array indexOfObject:@"ccc"]);
// 5. 判断数组中是否包含某一个给定对象
NSLog(@"%d", [array containsObject:@"aaa"]);
// 6. NSArray与NSString的转换方法
// NSString->NSArray
NSString *string1 = @"";
NSArray *array5 = [string1 componentsSeparatedByString:@"."];
NSLog(@"%@", array5);
// NSArray -> NSString
NSString *string2 = [array5 componentsJoinedByString:@"."];
NSLog(@"%@", string2);
NSString *str4 = @"我喜欢你";
NSArray *arr4 = [str4 componentsSeparatedByString:@""];
NSLog(@"%@", arr4);
NSString *str5 = [arr4 componentsJoinedByString:@""];
NSLog(@"%@", str5);
#endif
// 可变字符数组
// 1. 初始化方法
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"abc", @"def", nil];
NSLog(@"%@", array);
NSMutableArray *array1 = [[NSMutableArray alloc] initWithArray:array];
NSLog(@"%@", array1);
// 2.便利构造器
NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"123", @"456", nil];
NSMutableArray *array3 = [NSMutableArray arrayWithArray:array2];
NSLog(@"%@", array3);
// 与父类相同初始化
// 4.添加元素
[array2 addObject:@"789"];// 直接添加一个元素
NSLog(@"%@", array2);
[array1 addObjectsFromArray:array1];// 添加数组
NSLog(@"%@", array1);
// 5.删除元素
[array removeObject:@"abc"];// 删除指定元素
NSLog(@"%@", array);
[array removeAllObjects];// 删除所有元素
NSLog(@"%@", array);
// 6. 插入元素
NSLog(@"%@", array1);
[array1 insertObject:@"bnm" atIndex:1];
NSLog(@"%@", array1);
// 7. 交换指定位置的两个元素
[array2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"%@", array2);
// 8.替换元素
[array3 replaceObjectAtIndex:1 withObject:@"333"];
NSLog(@"%@", array3);
// 练习题
#if 1
Person *p1 = [[Person alloc] initWithName:@"1" withAge:10];
Person *p2 = [[Person alloc] initWithName:@"2" withAge:11];
Person *p3 = [[Person alloc] initWithName:@"3" withAge:12];
// 创建小组
// 创建空数组
//NSMutableArray *group = [NSMutableArray array];
NSMutableArray *group = [NSMutableArray arrayWithObjects:p1, p2, p3, nil];
// 添加一个成员
Person *p4 = [[Person alloc] initWithName:@"4" withAge:19];
[group addObject:p4];
NSLog(@"%@", group);
//
// [group removeObject:p1];
// [group removeObject:p2];
NSLog(@"%@", group);