在数据查询中,有时候会遇到使用两个或两个以上字段对一组数据集合进行排序,较为合理的处理逻辑应该是先按照字段之间的优先级关系将待排序的数据集合递归地以同一字段的值(同一层)升序或降序的方式进行拆分,然后在以由上往下顺(广度优先方式)序对父节点的叶子节点按照指定规则进行排序。(注:如果底层支持传入compare方法,那么每一组字段排序组合设计一种compare算法,会更加高效)
SQL语句中可以使用order by语句对多个字段进行排序(暂不清楚其实现原理,有可能和上面提到的处理逻辑类似)。该篇文章会讨论一种新的处理手段,将所有参加排序的字段按照指定的优先级关系从低到高以字节填充(binary)的方式将内容追加到一个字节切片(支持扩容的数组)中(区分大小写),即将多字段的排序”归化为“单一字段的排序。
由于出生日期可以以“19980408”的整型表示,月薪则已元作为计数单位(忽略小数部分),姓名以字符字节表示。无论是怎样的数据类型,都会以字节填充到“新字段”中,不过由于出生日期和月薪是以降序排序,我们需要对其值进行处理,新的出生日期=0xffffffff-老的出生日期,新的月薪=0xffff-老的月薪。其中“归一化”排序的核心过程为“填充字节序列+比较”。