// 数组 (NSArray)
// 系统提供的数组类 - 类似于C语言中的数组
// OC中的数组是一个大容器,数组可以存放不同类型的对象且只能保存对象
// OC数组提供了两类数组NSArray (不可变数组) NSmutableArray (可变数组)
// 可变数组与不可变数组的区别:可变就意味着对原有的对象进行增删改操作,而不可变数组就意味着数组一经创建就不能再修改
// 1.创建对象
// 1)初始化方法
NSArray *array = [[NSArray alloc] initWithObjects:@"dog", @"cat", @"fish", nil]; // 初始化多个元素
NSLog(@"%@", array);
NSArray *array1 = [[NSArray alloc] initWithArray:array];
NSLog(@"%@", array1);
// 2)建立便利构造器
NSArray *array2 = [NSArray arrayWithArray:array1];
NSLog(@"%@", array2);
NSArray *array4 = [NSArray arrayWithObjects:@"can", @"fis", @"iuo", nil];
NSLog(@"%@", array4);
// 3)字面量
NSArray *array11 = @[@"laowang", @"zhenshuai", @"cool"];
NSLog(@"%@", array11);
// 2.获取数组元素的个数
NSLog(@"%ld", array4.count);
// 3.获取数组中的元素
// 1)给定位置获取元素
NSLog(@"%@", [array4 objectAtIndex:1]);
// 2)第一个元素
NSLog(@"%@", [array4 firstObject]);
// 3)最后一个元素
NSLog(@"%@", array4.lastObject);
// 4.根据元素获取元素在数组中对应的索引(下标)
// 在未找到的情况下返回随机的一个数
NSLog(@"%ld", [array4 indexOfObject:@"iuo"]);
// 5.判断数组中是否包含某一个给定的对象
if ([array4 containsObject:@"iuo"]) {
NSLog(@"包含");
}
// 是否相等
NSArray *array5 = [NSArray arrayWithObjects:@"can", @"fis", @"iuo", nil];
if ([array5 isEqualToArray:array4]) {
NSLog(@"是");
}
// 6.NSArray 与 NSString 的相互转换方法
NSString *array6 = [array4 componentsJoinedByString:@"," ];
NSLog(@"%@", array6);
// NSString 与 NSArray的相互转换方法
NSString *array7 = @"jids,djf,ko";
NSArray *array8 = [array7 componentsSeparatedByString:@","];
NSLog(@"%@", array8);
NSArray *arr = [NSArray arrayWithObjects:@"你好", @"我不好", @"我好嗯好", nil];
NSLog(@"%@", [arr componentsJoinedByString:@"嘿嘿嘿"]);
NSString *str = [NSString stringWithFormat:@"今天哈哈哈"];
NSLog(@"%@", [str componentsSeparatedByString:@"篮球"]);
// 可变数组(nsmutableArray)
// 1.初始化方法
NSMutableArray *array20 = [[NSMutableArray alloc] init];
NSLog(@"%@", array20);
NSMutableArray *array21 = [[ NSMutableArray alloc] initWithObjects:@"qwe", @"yui", @"you", nil];
NSLog(@"%@", array21);
// 2.便利构造器
NSMutableArray *array22 = [NSMutableArray arrayWithObjects:@"cool", @"handsome", @"shuai", nil];
NSLog(@"%@", array22);
// 3.字面量
// 与父类初始化方法相同
// NSMutableArray *array23 = @[@"pig", @"peak", @"cake"];
// NSLog(@"%@", array23);
// 4.添加元素
// 直接在后面添加元素
[array22 addObject:@"3"];
NSLog(@"%@", array22);
// 通过数组添加
[array22 addObjectsFromArray:array21];
NSLog(@"%@", array22);
// 5。删除元素
// 1)删除单个元素
[array22 removeObject:@"handsome"];
NSLog(@"%@", array22);
// 2)删除所有元素
// [array22 removeAllObjects];
// NSLog(@"%@", array22);
// 6.插入元素
[array21 insertObject:@"qqq" atIndex:2];
NSLog(@"%@", array21);
// array21 insertObjects:<#(nonnull NSArray *)#> atIndexes:<#(nonnull NSIndexSet *)#>
// 7.交换指定位置的两个元素
[array22 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"%@", array22);
// 8.替换元素
[array22 replaceObjectAtIndex:0 withObject:@"789"];
NSLog(@"%@", array22);
// 给定范围
// array22 replaceObjectsInRange:<#(NSRange)#> withObjectsFromArray:<#(nonnull NSArray *)#>
// 用来存储具有一一对应关系的数据,本质上也是一个大容器
// 1.创建对象
// 1)初始化方法
// 初始化的时候赋值必须成对出现
// 先Value 后 Key
NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"2", @"3", @"4", nil];
NSLog(@"%@", dic);
NSArray *array1 = [NSArray arrayWithObjects:@"qq", @"ww", @"ee", nil];
NSArray *key1 = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
NSDictionary *di1 = [[NSDictionary alloc] initWithObjects:array1 forKeys:key1];
NSLog(@"%@", di1);
// 2)便利构造器
NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"dog", @"d", @"cat", @"c", nil];
NSLog(@"%@", dic1);
// 通过数组创建
NSArray *array = [NSArray arrayWithObjects:@"qq", @"ww", @"ee", nil];
NSArray *key = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
NSDictionary *di = [NSDictionary dictionaryWithObjects:array forKeys:key];
NSLog(@"%@", di);
// 3)字面量
NSDictionary *dic2 = @{@"key1": @"value1", @"key2": @"value2"};
NSLog(@"%@", dic2);
// 2.求所有元素的个数
NSLog(@"%lu", dic1.count);
// 3.根据Key取出对应的Value
NSLog(@"%@", [dic objectForKey:@"c"]);
// 4。获取所有的Key,所有的Value
NSLog(@"%@", [dic1 allKeys]);
NSLog(@"%@", [dic1 allValues]);
// 4.可变字典(NSMutableDictionary)
// 1.创建对象
NSMutableDictionary *dic3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"tea", @"t", @"pool", @"p", @"take", @"t", nil];
NSLog(@"%@", dic3);
// 2.向字典内添加对象
// 字典内的数据是无序的
[dic3 setObject:@"heel" forKey:@"h"];
NSLog(@"%@", dic3);
// 替换
[dic3 setDictionary:dic1];
NSLog(@"%@", dic3);
// 3.修改Key对应的Value
// setObject forKey 先查找对应的Key,如果有的haunted,修改Value,如果没有的 话则把Key - Value作为元素添加到字典中
[dic3 setObject:@"fg" forKey:@"g"];
NSLog(@"%@", dic3);
// [dic3 setObject:@"maomao" forKeyedSubscript:@"t"];
// NSLog(@"%@", dic3);
// 4。移除元素
// 1)移除某一个元素 --根据Key去移除
[dic3 removeObjectForKey:@"p"];
NSLog(@"%@", dic3);
[dic3 setValue:nil forKey:@"c"];
NSLog(@"%@", dic3);
// 2)移除所有元素
// [dic3 removeAllObjects];
// NSLog(@"%@", dic3);
// 男神小贴士:在字典中一个Key只能对应一个Value,而一个Value可以对应多个Key
// 锁(Value) 与 钥匙(Key) 的关系