NSArray数组

sorted分类 / comparator比较器 / descriptors描述符 / ascend上升 /

//排序
1.字符串数组排序
IOS提供一个sortedArrayUsingSelector()函数,用于对字符串数组进行排序,方法会在排序后返回一个新的数组。
[array sortedArrayUsingSelector (@selector(xxxx:))];
xxxx:方法需要你自己根据实际情况设定排序方式。有默认的排序方法 compare :
数字数组排序:
将数字加入数组,首先要转换成NSNumber。然后再使用sortedArrayUsingSelector:
注意取出数字元素的时候在转换成double类型
2.利用block语法
iOS提供一个 sortUsingComparator函数。
[array sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSComparisonResult result = [obj1 compare:obj2 options:NSNumericSearch];
return result;
}];
升序 NSComparisonResult result = [obj1 compare:obj2 options:NSNumericSearch];
降序 NSComparisonResult result = [obj2 compare:obj1 options:NSNumericSearch];
3.使用sortedArrayUsingDescriptors:进行排序(高级排序)
如果数组对象就是字符串,sortDescriptorWithKey指定为nil,就直接排序对象了,
创建描述符,按照排序规则创建类中某属性的描述符,可创建多个。
NSSortDescriptor * amountDes = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
根据描述符组成的规则数组进行排序。
NSArray * resultArray = [array sortUsingDescriptors:@[amountDes]];
如果对象是对象的属性,sortDescriptorWithKey指定为对象的某个属性,添加多个排序规则进行排序。
NSSortDescriptor * nameDes = [NSSortDescriptor sortDescriptorWithKey:@“name"l ascending:NO];
NSSortDescriptor * dateDes = [NSSortDescriptor sortDescriptorWithKey:@“date" ascending:NO];
NSArray * resultArray = [array sortUsingDescriptors:@[nameDes,dateDes]];

4.使用sortedArrayUsingSelector:(SEL)comparator进行排序

  • (NSComparisonResult)Compare2:(sort *)sort {
    if ( self.number > sort.number ) {
    return NSOrderedDescending; //颠倒 self.number和 sort.number的顺序
    } else if (self.number < sort.number ) {
    return NSOrderedAscending;
    } else {
    return NSOrderedSame;
    }
    }

//枚举数组中元素的Block方法,obj数组元素,idx元素下标,stop是否停止
[couponArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
couponEntity * temp = obj;
NSLog(@"idx:%lu value:%@ date:%@",(unsigned long)idx,temp.couponValue,temp.endDate);
}];
//把数组拼接成字符串
NSString * str = [arr componentsJoinedByString:@“-“];
//把字符串拆分成数组
NSArray * arr = [str componentsSeparatedByString:@“-”];

//NSArray写入文件
BOOL isWrite = [array writeToFile:@“/Users/yuqing/Desktop/arr.xml” atomically:YES];
if (isWrite) {//写入成功}
//NSArray读取文件
NSArray * readArr = [NSArray arrayWithContentsOfFile:@“/Users/yuqing/Desktop/arr.xml”];

//compare

你可能感兴趣的:(NSArray数组)