// 第五章集合 ( 数组、字典、集合 )
// OC中存储数据的容器类叫做集合(Collection):包括三个类{ 数组 字典 集合(NSSet)
// 可变可以增加和删除里面的对象,不可变不行,一般情况下用可变
// 可变继承不可变 不可变有字面量
// 均可用Arr/dictionary/set.count 字典为key个数
// 都可以直接打印
// 一、数组:
// 不可变数组:NSArray
// 数组的定义:
NSArray *arr2 = [[NSArray alloc]init];
NSArray *arr = [[NSArray alloc]initWithObjects:@"re", @"tr", @"yr", nil];//nil数组结束的标志
// 字面量定义:
NSArray *arr1 = @[@"ios", @"Android", @"windows"];
[arr1 containsObject:@"windows"];//判断数组是否包含某个对象
NSInteger index = [arr1 indexOfObject:@"Android"];//获取元素下标
id object = [arr1 objectAtIndex:2];//根据数组访问数组元素
// 可变数组:NSMutableArray
NSMutableArray *arrQ = [[NSMutableArray alloc]initWithObjects:@"1", @"2", @"3", nil];
NSMutableArray *arrT = [[NSMutableArray alloc]initWithArray:arrQ];
[arrT addObject:@"Symbian"];//添加元素,添加到数组的最后
[arrT insertObject:@"Symbian" atIndex:1];//插入元素
[arrT removeObjectAtIndex:1];//删除元素
[arrT replaceObjectAtIndex:1 withObject:@"3"];//替换
// ********** 数组排序 **********
NSArray *arr1 = @[@"30", @"17", @"1", @"13", @"7"];
NSArray *arr2 = @[@(30), @(17), @(1), @(13), @(7)];
//可变
NSArray *sortArr = [arr2 sortedArrayUsingSelector:@selector(compare:)];//@selector(selector)方法选择器
//不可变
NSMutableArray *arr3 = [NSMutableArray arrayWithArray:arr1];
[arr3 sortUsingSelector:@selector(compare:)];
// 方法的返回值是 NSComparisonResult, 参数是数组中元素的类型
// 若数组中的数据为类,那就在类的方法里面撰写compare
// -(NSComparisonResult)compareHPWith:(类 *)boss;
// 二、字典:存储的数据叫做键值对(key-value)
// 原则:
// 1、字典中的数据是成对出现的
// 2、值(value)不能为空(nil),nil为结束符,value是对象类型
// 3、key不能重复(除了第一个之外其余无效),key一般是字符串
// 不可变字典:NSDictionary
// (1)字典的定义:无序字典
NSDictionary *dicNULL = [[NSDictionary alloc]init];
NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"value",@"key", nil];//先值后键
// 字面量定义
NSDictionary *dicA = @{@"key":@"value"};
NSDictionary *dicB = [[NSDictionary alloc]initWithObjects:@[@"value数组"] forKeys:@[@"key数组"]];
// (2)通过key访问值
id value = [dic objectForKey:@"key"];
// 字面量访问
id valueA = dic[@"key"];
// (3)获取所有key、value
NSArray *arrA = [dic allKeys];
NSArray *arrB = [dic allValues];
// 可变字典:NSMutableDictionary
// (1)字典的定义:
NSMutableDictionary *dicC = [[NSMutableDictionary alloc]init];
NSMutableDictionary *dicD = [[NSMutableDictionary alloc]initWithDictionary:dicA];//将不可变字典转成可变字典
NSMutableDictionary *dicE = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"value",@"key", nil];
[dicE setObject:@"value2" forKey:@"key2"];//添加键值对
[dicE setObject:@"value" forKey:@"key2"];//修改键值对
[dicE removeObjectForKey:@"key"];//删除键值对
// 三、集合
// 集合的定义:无序集合
// 不可变集合:NSSet
NSSet *set = [[NSSet alloc]initWithObjects:@"id", nil];
NSString *str = [set anyObject];//获得随机对象
// 可变集合:NSMutableSet
NSMutableSet *mSet = [[NSMutableSet alloc]initWithObjects:@"散货", nil];
[mSet addObject:@"或手机"];//添加元素
[mSet removeObject:@"散货"];//删除元素
[mSet containsObject:@"或手机"];//判断是否包含某个元素
// 记录元素及出现次数
NSCountedSet *cSet = [[NSCountedSet alloc]initWithSet:mSet];
NSCountedSet *cset = [[NSCountedSet alloc]initWithObjects:@"lol",@"lol", nil];
NSLog(@"%@",cSet);
NSInteger count = [cSet countForObject:@"a"];//Cset用
NSLog(@"%ld",count);
//************ 集合(Collection)遍历、快速枚举: 字典遍历的是key值 ************
// Collection :要遍历的集合的变量名 数组名 字典名 集合名
// type *object :元素的类型 + 变量名
// statements : 具体要实现的代码
// for (type *object in collection) {
// statements
// }
OC - 第五章 集合 ( 数组、字典、集合 )
最新推荐文章于 2023-05-14 15:14:57 发布