树状结构数据按照顺序排序

简介: 树状结构数据按照顺序排序

这里写两种实现,一种java,一种js

首先是js的

const list = [
  {titleNum: '1.1.1'}, 
  {titleNum: '1'},
  {titleNum: '10'},  
  {titleNum: '2'}
];
list.sort((a, b) => {
  const aLevels = a.titleNum.split('.').map(i => parseInt(i));
  const bLevels = b.titleNum.split('.').map(i => parseInt(i));
  const minLength = Math.min(aLevels.length, bLevels.length);
  for (let i = 0; i < minLength; i++) {
    if (aLevels[i] !== bLevels[i]) {
      return aLevels[i] - bLevels[i];
    } 
  }
  return aLevels.length - bLevels.length; 
});
console.log(list);

其次是java的:

Collections.sort(list,new Comparator<Chatr>(){
  @Override
  public int compare(Chatr o1,Chatr o2){
    String[] levels1=o1.getTitleNum().split("\\.");
    String[] levels2=o2.getTitleNum().split("\\.");
    int idx=0;
    while(idx<levels1.length && idx<levels2.length){
      int level1=Integer.parseInt(levels1[idx]);
      int level2=Integer.parseInt(levels2[idx]);
      if(level1 != level2){
        return Integer.compare(level1,level2);
      }
      idx ++;
    }
    return Integer.compare(levels1.length,levels2.length);
  }
});

以上。

目录
相关文章
|
5月前
|
存储 索引
数据结构(顺序结构、链式结构、索引结构、散列结构)
数据结构(顺序结构、链式结构、索引结构、散列结构)
|
4月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
29 0
|
5月前
|
算法 测试技术 C#
【离散化】【 树状树状 】100246 将元素分配到两个数组中
【离散化】【 树状树状 】100246 将元素分配到两个数组中
|
5月前
【数据结构】图结构及其遍历方式
【数据结构】图结构及其遍历方式
56 0
两个有序链表序列的合并(附加代码模式)
两个有序链表序列的合并(附加代码模式)
58 1
数据结构(7)树形结构——红黑树(概念、插入过程、删除过程)
7.1.概述 平衡二叉树是要求任意结点的左右子树高度差不超过1,因此在AVL中用旋转来保证树的绝对平衡,但是这些旋转操作步骤繁多很耗时间,所以在面对经常会有数据插入的场景时,AVL不是一个性能优秀的选择。这时候反过来思考一个问题,旋转是为了保证树的绝对平衡,但是树的绝对平衡是必须的吗?显然不是,树的高度差只要不是太高从而退化成斜二叉树其实就能接受。
87 0
|
存储
树型结构——二叉数
树型结构——二叉数
142 0
树型结构——二叉数
|
算法 索引
【数据结构】动态查找表— B-树和B+树
【数据结构】动态查找表— B-树和B+树
176 0
【数据结构】动态查找表— B-树和B+树
基础结构-链表-合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
89 0
|
索引
按顺序遍历表
按顺序遍历表
124 0