数据类型一:array
有序元素的集合。元素必须由对象组成,不能包含基本数据类型。
1.不可变数据 NSArray
创建:NSArray *array = @[@1,@1,@2];
#1.取元素
NSString *str = array[0];
NSString *str =[array objectAtIndex:0];
#2.添加元素 不可变数组没法在原有基础上添加新的元素
如果要较真 那可以这样
array = [array arrayByAddingObject:@"176"];
或者:
array = [array arrayByAddingObjectsFromArray:@[@18,@19]];
这两种方式看起来好像是添加了新的元素
实际上是创建了一个新的数组 让array指向了一个新的内存空间 释放了原指向空间
#3.将各元素拼接成字符串
NSString *str = [array componentsJoinedByString:@"/"];
#4.判断是否包含指定元素
[array containsObject:@1]
#5.判断两个数组是否一样
[array isEqualToArray:[NSArray array]]; //这里判断的是两个数组的值是否相等 而非引用(即地址)
#6.取数组的第一个元素与最后一个元素
arrar.firstObject
arrar.lastObject
#7.排序
方式1:array = [array sortedArrayUsingSelector:@selector(compare:)];//返回新数组 升序 按照ASCII比较
方式2:
array = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSComparisonResult result = [obj1 compare:obj2];
//obj1 compare obj2 是正序排列
//obj2 compare obj1 是倒序排列
return result;
}];
有一点注意的东西 这种单纯的比较数据类型提前处理好 统一
方式3:描述法排序 这种比较适合对自定义对象的比较 多条件比较 由第一描述开始判断 如果有结果则直接返回结果 如果相等则继续判断第二描述 依次类推
对象:
Penson *p = [Penson new];
p.age = 27;p.workyear = 3;
NSArray *pensons = @[p,p,p,p];
//描述条件一 NO 降序
NSSortDescriptor *age = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
//描述挑那间二 YES 升序
NSSortDescriptor *workyear = [NSSortDescriptor sortDescriptorWithKey:@"workYear" ascending:YES];
//采取哪些描述进行排序 得到最后结果
pensons = [self.pensons sortedArrayUsingDescriptors:@[age, workyear]];
#8.遍历
for (int i = 0; i < 10;i ++) {}
for (id value in array) { }
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }];
#9.让数组中每一个元素都执行一遍方法
[arr makeObjectsPerformSelector:@selector(function)];//function是元素对象有的方法
[arr makeObjectsPerformSelector:@selector(function:) withObject:@100];//function:是元素对象有的方法 withObject:传递的参数
例:[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
#注意点:不可变数组 无法修改元素值与删除元素 严格意义也无法添加新元素
2.可变数组 NSMutableArray
上面的不可变数组的使用方法 可变数组都可以使用
创建:NSMutableArray *array = [NSMutableArray array];
#1.添加元素
[array addObject:@13];
[array addObjectsFromArray:@[@14,@19,@20]];
#2.改变元素的值 replace.....
array[0] = @"newAdd";//直接赋值
[array replaceObjectAtIndex:0 withObject:@190];//根据指定下标
[array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@1000,@2000]];//根据指定range
[array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@"message",@"test",@"value"] range:NSMakeRange(1, 2)];//根据指定range
#3.删除 remove.....
[array removeObject:@19];//移除指定元素
[array removeObjectAtIndex:0]; //移除指定下标
[array removeAllObjects];//移除全部元素
数据类型二:字典 dictionary
使用 hash表来实现key和value之间的映射和存储 字典是无序的
1.不可变字典 NSDictionary
创建:NSDictionary *dict = @{@"key":@"value"};
#1.取值
dict[@"key"];
[dict objectForKey:@"key"];
#2.获取所有key 所有value
dict.allKeys dict.allValues
//可以通过获取的keys values 判断是否包含某个元素 并且将value拼接成字符串 key拼接成字符串
#3.字典比较
[dict isEqualToDictionary:[NSDictionary new]];//值比较
#4.遍历
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { }];//常用方式
#5.排序
无序 下面是一个思路 可以按照一定规律 转换成其它类型
- (NSString *)stringWithDict:(NSDictionary *)dict{
NSArray *sortedArray = [dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2) {
return[obj1 compare:obj2 options:NSNumericSearch];//正序
}];
NSString *str =@"";
for(NSString*categoryId in sortedArray) {
id value = [dict objectForKey:categoryId];
if([value isKindOfClass:[NSDictionary class]]) {
value = [self stringWithDict:value];
}
if([str length] !=0) {
str = [str stringByAppendingString:@","];
}
str = [str stringByAppendingFormat:@"%@:%@",categoryId,value];
}
NSLog(@"str:%@",str);
return str;
}
2.可变字典 NSMutableDictionary
上面的不可变字典的使用方法 可变字典都可以使用
创建:NSMutableDictionary *nmDict = [NSMutableDictionary dictionary];
#1.添加元素
[nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加
[nmDict addEntriesFromDictionary:@{@"key2":@"value2"}];
#2.改变元素的值
nmDict[@"key1"] = @"message";//重新赋值
[nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加
#3.删除 remove.....
[nmDict removeObjectForKey:@"key1"];//移除指定key
[nmDict removeAllObjects];//移除所有
数据类型三:string
1.不可变字符串 NSString
创建:NSString *str = @"message";
#1.获取字符串指定下标字符
//方式一
unichar s = [str characterAtIndex:1];
NSString *newcharStr = [NSString stringWithFormat:@"%C",ch];//将unichar转化为string
//方式二
[str substringWithRange:NSMakeRange(0, 1)];//获取下标为0的字符
#2.字符串截取
[str substringToIndex:2]//从开始截取2位
[str substringFromIndex:4]//从下标为4的位置 截取到最后
[str substringWithRange:NSMakeRange(0, 1)]//截取指定区域字符串
#3.字符串的比较
//严格模式
NSComparisonResult result = [str compare:@"aaa"];
//options 怎么比 这里选的不区分大小写
NSComparisonResult result = [str compare:@"aaa" options:NSCaseInsensitiveSearch];
/**
NSComparisonResult:
NSOrderedAscending//后面比前面小
NSOrderedSame//一样大
NSOrderedDescending//后面比前面大
*/
[str isEqualToString:@"aaa"];//比较值是否相等 区分大小写
#4.判断字符串是否包含指定字符窜
[str hasPrefix:@"m"] //头部是否包含
[str hasSuffix:@"e"] //尾部是否包含
[containsString:@"ss"]//不分位置 包含则返回YES ios8later
#5.获取指定字符串 在原字符串中位置
NSRange range = [rangeOfString:@"me"];
NSRange range = [rangeOfString:@"me" options: NSCaseInsensitiveSearch];//options 怎么比 这里选的不区分大小写
#6.拼接字符串
[str stringByAppendingString:@"newString"];
[str stringByAppendingFormat:@"%@", @"newString"];
#7.基础类型转换
@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) long long longLongValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) BOOL boolValue
#8.大小写
@property (readonly, copy) NSString *uppercaseString;//全部大写
@property (readonly, copy) NSString *lowercaseString;//全部小写
@property (readonly, copy) NSString *capitalizedString;//首字母大写
#9.空格与换行符
//去掉所有空格与换行
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];
//去掉首位空格
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//去掉首位空格与换行
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet ]];
#10.字符串切割成数组
NSArray *array = [str componentsSeparatedByString:@","];// 以,为分隔符进行切割
2.可变字符串
创建:NSMutableString *str = [NSMutableString string];
#1.添加字符串
[str appendString:@"message"];
[str appendFormat:@" %@",@"new"];
[str insertString:@"aString" atIndex:3];//插入字符串到指定位置
#2.替换字符
[str replaceCharactersInRange:NSMakeRange(0, 3) withString:@"MES"];//替换指定区域
[str replaceOccurrencesOfString:@"AGE" withString:@"AGE" options:NSCaseInsensitiveSearch range:NSMakeRange(0, str.length)];//在全区域内搜寻 替换指点字符串 不区分大小写
#3.删除
[str deleteCharactersInRange:NSMakeRange(0,2)];
网友评论