记一次对多字段按照优先级分类再进行排序

        在数据查询中,有时候会遇到使用两个或两个以上字段对一组数据集合进行排序,较为合理的处理逻辑应该是先按照字段之间的优先级关系将待排序的数据集合递归地以同一字段的值(同一层)升序或降序的方式进行拆分,然后在以由上往下顺(广度优先方式)序对父节点的叶子节点按照指定规则进行排序。(注:如果底层支持传入compare方法,那么每一组字段排序组合设计一种compare算法,会更加高效)

        SQL语句中可以使用order by语句对多个字段进行排序(暂不清楚其实现原理,有可能和上面提到的处理逻辑类似)。该篇文章会讨论一种新的处理手段,将所有参加排序的字段按照指定的优先级关系从低到高以字节填充(binary)的方式将内容追加到一个字节切片(支持扩容的数组)中(区分大小写),即将多字段的排序”归化为“单一字段的排序。

举例:s公司最近要统计不同年龄段中,不同薪资的员工信息,为了让数据更直观,上层要求按照员工年龄(出生日期)降序、员工月薪降序和员工姓名升序的规则进行排序统计。若以“归一化”方法进行排序,原理如下图。

由于出生日期可以以“19980408”的整型表示,月薪则已元作为计数单位(忽略小数部分),姓名以字符字节表示。无论是怎样的数据类型,都会以字节填充到“新字段”中,不过由于出生日期和月薪是以降序排序,我们需要对其值进行处理,新的出生日期=0xffffffff-老的出生日期,新的月薪=0xffff-老的月薪其中“归一化”排序的核心过程为“填充字节序列+比较”。

所以该排序算法支持多字段且多类型的排序,无需为每一种排序组合都写一个排序算法,只需以字节(如上面的员工年龄和员工月薪可能需要对数据进行特殊处理)作为参数传入并获取一个“新字段”的字节序列,再以”新字段“构成的集合作为参数传入并获取到一个已经排好序的集合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值