欢迎光临
我们一直在努力

排序工具: 可排序字符串和继承自NSObject的model对象

建站超值云服务器,限时71元/月

排序工具: 可排序字符串和继承自NSObject的model对象

项目介绍:

PS: 简单排序工具, 如有bug, 可留言, 或到
https://github.com/LQQZYY/LZSortTool提交, 最新的代码会上传到https://github.com/LQQZYY/LZSortTool, 可移步下载.如果您感觉不错,可以star一下, 谢谢!

介绍

LZSortTool是一个分组排序工具,对排序操作进行了简单的封装,只需将所需排序的内容放在数组传过去即可;
对外接口中,预留了两个方法,分别是对字符串内容进行排序,和对NSObject对象(一般是我们创建的数据模型model)进行排序

/**
 *  @author LQQ, 16-08-20 14:08:26
 *
 *  对一组字符串,按照首个字符的首字母进行分组排序
 *
 *  @param sourceArray 待分组排序的字符串集合集合
 *  @param sortType 排序结果的类型
 *
 *  @return 返回一个排序分组后的数组
 */
+ (nullable NSArray*)sortStrings:(nonnull NSArray<NSString *>*)sourceArray withSortType:(LZSortResultType)sortType;

/**
 *  @author LQQ, 16-08-20 14:08:19
 *
 *  对一组NSObject的子类对象(一般是model模型)按某个属性进行排序
 *
 *  @param sources 含有model的数组
 *  @param key 排序依据,必须是model的一个字符串属性,不能为nil
 *  @param sortType 排序结果的类型
 *
 *  @return 返回排序结果(含有model)
 */
+ (nullable NSArray *)sortObjcs:(nonnull NSArray <NSObject *>*)sources byKey:(nonnull NSString *)key withSortType:(LZSortResultType)sortType;

这里的参数都有说明,直接看注释即可;
另外LZSortResultType是设置返回的结果类型,这里我给了两种:

  • 一种是不含排序后的索引的
    排序的结果数组中含有的元素为数组,内含数组中的内容是分组后的元素

  • 一种是含有排序后的索引的
    排序的结果数组中含有的元素为字典,字典包含两个字段,分别对应索引和该索引的分组(数组)

当返回含有索引时,由于返回的结果数组中是字典,为便于取值,这里我将这两个字段的key值进行了预定义:

/** 返回的排序后的结果字典中,序号对应的key */
 static NSString  const * _Nonnull  LZSortToolKey = @"LZSortToolKey";

/** 返回的排序后的结果字典中,value对应的key*/
static NSString const * _Nonnull LZSortToolValueKey = @"LZSortToolValueKey";

在取值的时候,直接使用这个预定义的key即可;

NSArray *arr = [dic objectForKey:LZSortToolValueKey]

集成

手动添加

手动添加非常简单,只需将文件夹LZSortClass拖到自己工程, 然后在需要的地方引入头文件:

cocoapods添加

如果使用cocoapods管理, 可以在Podfile文件添加以下代码即可:

pod 'LZSortTool'

使用

引入头文件

#import "LZSortTool.h"

对字符串进行排序

- (NSMutableArray *)nameArray {
    if (!_nameArray) {
        _nameArray = [[NSMutableArray alloc]initWithObjects:@"鲁迅",@"###",@"刘一",@"赵四",@"钱",@"李三",@"孙五",@"王二",@"黄蓉",@"孙悟空",@"哪吒",@"李天王",@"范冰冰",@"赵丽颖",@"霍建华",@"黄晓明",@"成龙",@"李连杰",@"李小龙",@"曾小贤",@"LiShan", nil];
    }
    
    return _nameArray;
}


NSArray *arr = [LZSortTool sortStrings:self.nameArray withSortType:LZSortResultTypeSingleValue];
NSArray *arr1 = [LZSortTool sortStrings:self.nameArray withSortType:LZSortResultTypeDoubleValues];

这样即可获取到分组排序的结果;

对NSObject进行排序

首先,定义一个模型:

#import <Foundation/Foundation.h>

@interface People : NSObject

@property (nonatomic,copy)NSString *name;
@property (nonatomic,assign)NSInteger age;
@end

创建数据源:

NSMutableArray *pArray = [NSMutableArray arrayWithCapacity:0];
    for (NSString *str in self.nameArray) {
        People *p = [[People alloc]init];
        p.name = str;
        p.age = arc4random()%90 + 10;
        
        [pArray addObject:p];
    }

排序:

NSArray *pArr = [LZSortTool sortObjcs:pArray byKey:@"name" withSortType:LZSortResultTypeDoubleValues];

示例图

字符串排序,直接查看控制台输出吧,这里只给出模型排序的截图:
模型排序示例图

code4app

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 排序工具: 可排序字符串和继承自NSObject的model对象
分享到: 更多 (0)