精华内容
下载资源
问答
  • Java中对集合的排序,因为项目中得实现一个点击表头对数据进行排序的功能,当然实现这个效果并难,你完全可以在点击表头时向Action中发出一个请求,然后在利用排序的Hql语句对数据进行排序,这样你完全可以达到目...

    Java中对集合的排序,因为项目中得实现一个点击表头对数据进行排序的功能,当然实现这个效果并不难,你完全可以在点击表头时向Action中发出一个请求,然后在利用排序的Hql语句对数据进行排序,这样你完全可以达到目地;但是性能可就不高了咯。。。。。

         下面介绍下对集合进行自定义的排序,因为很多情况下,集合中的数据保存的都是类对象,我们要对集合进行排序,换句话讲就是根据类中定义的属性对类进行排序。。。Java中对类进行排序处理,满足两个要求,1:实现Comparable接口,实现public int compareTo(Object o)方法就OK了, 这个compareTo方法返回值是个int类型,若大于0则表示按升序,0表示类对象大小相同,小于0则表示类对像按降序排列了;

     

     

    我们举例说明:

     

    package com;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.List;

     

    public class Book implements Comparable<Book> {

     // 对象的排序方式[升、降]
     private static boolean sortASC = true;

     // 对象的排序属性
     private static boolean sortBybId = false;
     private static boolean sortBybName = false;
     private static boolean sortBybDate = false;

    //类属性

     private int bId;
     private String bName;
     private Date bDate;

     

    //构造方法

     public Book(int id, String name, Date date) {
         super();
         bId = id;
         bName = name;
         bDate = date;
     }

     

    //必须实现的方法

     public int compareTo(Book book) {
      if (sortBybId) {
           if (sortASC)
                  return this.bId > book.bId ? 1 : this.bId == book.bId ? 0 : -1;
           else
                  return this.bId > book.bId ? -1 : this.bId == book.bId ? 0 : 1;
      } else if (sortBybName) {
            if (sortASC) {
                 int result = this.bName.compareTo(book.bName);
                 return result;
            } else {
               int result = this.bName.compareTo(book.bName);
              return result > 0 ? -1 : result == 0 ? result : 1;
           }
      } else if (sortBybDate) {
           if (sortASC) {
                int result = this.bDate.compareTo(book.bDate);
                return result;
          } else {
                int result = this.bDate.compareTo(book.bDate);
                return result > 0 ? -1 : result == 0 ? result : 1;
          }
       }
            return 1;  //默认返回值;
     }

     

    //测试

     public static void main(String[] args) throws ParseException {
          List<Book> lst = new ArrayList<Book>();
          SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
          lst.add(new Book(1, "aaa",sdf.parse("2001-1-1")));
          lst.add(new Book(4, "fff",sdf.parse("2001-10-5")));
          lst.add(new Book(3, "zzzz",sdf.parse("2001-2-1")));


        //我想按对象的编号升序排列
        // Book.sortASC=true;
        // Book.sortBybId=true;

     

     

         //我想按对象的编号降序排列
         // Book.sortASC=false;
        // Book.sortBybId=true;

      

     

        //我想按对象的姓名降序排列
        // Book.sortASC=false;
        // Book.sortBybName=true;
      
       // 我想按对象的时间降序排列
        Book.sortASC=false;
        Book.sortBybDate=true;

     

        Book[] book = lst.toArray(new Book[] {});
        Arrays.sort(book);    //开发循环调用compareTo方法
        lst = Arrays.asList(book);

     

       //排序后输出

        for (Book b : lst) {
          System.out.println("bid==" + b.bId + "  bName==" + b.bName);
       }
      
      //排序属性值恢复
      Book.sortBybId = false;
      Book.sortBybName = false;
      Book.sortBybDate = false;


      
      // Book[] book = new Book[] { new Book(4, "aaa"), new Book(3, "bbb") };
      // for (Book book2 : book) {
      // System.out.println("bid==" + book2.bId + " bName==" + book2.bName);
      // }
      // Arrays.sort(book);
      // for (Book book2 : book) {
      // System.out.println("bid==" + book2.bId + " bName==" + book2.bName);
      // }
     }

    }

    展开全文
  • 请注意,sort()原始数据被破坏,sorted()没有原始数据进行操作,而是新建了一个新数据。 一、基本的排序 最基本的排序很简单。只要使用sorted()函数即可返回一个 新的排序的列表 >>>sorted([5, 2, 3, 1, 4]) [1, ...
  • 工作中找到的思路, 一定好, 但是可以解决问题
    1 store中设置   remoteSort:true,       //用服务端的排序规则
    2 String sort = request.getParameter("sort");//排序字段      因为ext会根据点击列自动传递sort参数,
    3 处理 sort数据  //获取排序字段和排序方式
    JSONArray jsonArray = null;
    jsonArray = new JSONArray(sort);
    String property = (String) jsonArray.getJSONObject(0).get("property");//排序字段
    String direction = (String) jsonArray.getJSONObject(0).get("direction");//排序方式 ASC/DESC

    4 处理property
    //需要的排序字段的判断
    if("createDate".equals(property)) {
    property = "create_date";
    }else if("updateDate".equals(property)) {
    property = "update_date";
    }else {
    property=null;
    }


    4 sql的xml中 ,
    <if test="direction!= null and '' !=direction and property!= null and '' !=property">
    order by c.${property} ${direction} 
    </if>
    展开全文
  • 2020-12-24 14:22:18来源:亿速云阅读:88作者:Leah今天就跟大家聊聊有关利用php怎么按照权重对数据进行排序,可能很多人都太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所...

    利用php怎么按照权重对数据进行排序

    发布时间:2020-12-24 14:22:18

    来源:亿速云

    阅读:88

    作者:Leah

    今天就跟大家聊聊有关利用php怎么按照权重对数据进行排序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    具体实现方法如下:

    /**

    * @param array $weight 权重  例如array('a'=>10,'b'=>20,'c'=>50)

    * @return string key   键名

    */

    function roll($weight = array()) {

    $roll = rand ( 1, array_sum ( $weight ) );

    $_tmpW = 0;

    $rollnum = 0;

    foreach ( $weight as $k => $v ) {

    $min = $_tmpW;

    $_tmpW += $v;

    $max = $_tmpW;

    if ($roll > $min && $roll <= $max) {

    $rollnum = $k;

    break;

    }

    }

    return $rollnum;

    }

    $row=roll(array('a'=>10,'b'=>20,'c'=>50));

    echo $row;

    ?>

    看完上述内容,你们对利用php怎么按照权重对数据进行排序有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

    展开全文
  • ORDER BY 子句可以将查询的结果按照某种规则进行排序。排序方式分为升序和降序;可以基于单列或表达式排序,也可以基于多列或多个表达式排序。中文排序需要字符集和排序规则的支持,不同数据库的实现各相同。另外...

    《SQL 从入门到精通》专栏目录


    上一篇我们讨论了如何使用 LIKE 运算符和正则表达式函数进行文本数据的模糊查找。当你在运行前面几篇文章中的示例时,得到的结果可能与文章中不完全一致,主要是数据的显示顺序可能不同。这是因为 SQL 在查询时不保证返回结果的顺序。

    如果想要查询的结果按照某种规则进行排序,例如按照工资从高到低排序,可以使用 SQL 中的 ORDER BY 子句。

    单列排序

    按照单个字段或者表达式的值进行排序称为单列排序。单列排序的语法如下:

    SELECT col1, col2, ...
      FROM t
     ORDER BY col1 [ASC | DESC];
    

    其中,ORDER BY 用于指定排序的字段;ASC 表示升序排序(Ascending),DESC 表示降序排序(Descending),默认值为升序排序。以下是排序操作的示意图:

    avatar

    以下示例查询研发部门(dept_id = 4)的员工信息,并且按照月薪从高到低排序显示:

    SELECT emp_name, salary, hire_date
      FROM employee
     WHERE dept_id = 4
     ORDER BY salary DESC;
    

    该查询中使用了 WHERE 过滤条件,此时 ORDER BY 子句位于 WHERE 之后。该语句执行的结果如下:

    avatar

    对于升序排序,数字按照从小到大的顺序排列,字符按照编码的顺序排列,日期时间按照从早到晚的顺序排列;降序排序正好相反

    在上面的查询结果中,“张苞”和“廖化”的月薪都是 6500。那么他们俩谁排在前面,谁排在后面呢?答案是不确定。如果要解决这个问题,需要使用多列排序。

    多列排序

    多列排序是指基于多个字段或表达式的排序,使用逗号进行分隔。多列排序的语法如下:

    SELECT col1, col2, ...
      FROM t
     ORDER BY col1 ASC, col2 DESC, ...;
    

    首先基于第一个字段进行排序;对于第一个字段排序相同的数据,再基于第二个字段进行排序;依此类推。

    以下语句查询研发部门(dept_id = 4)的员工信息,并且按照月薪从高到低排序,月薪相同时再按照入职先后进行排序:

    SELECT emp_name, salary, hire_date
      FROM employee
     WHERE dept_id = 4
     ORDER BY salary DESC, hire_date;
    

    该查询的结果如下:

    avatar

    “廖化”排在了“张苞”之前,因为他的入职日期更早。

    在指定排序字段时,除了使用字段名或者表达式之外,也可以使用这些字段在 SELECT 列表中出现的顺序表示。上面的示例可以改写如下:

    SELECT emp_name, salary, hire_date
      FROM employee
     WHERE dept_id = 4
     ORDER BY 2 DESC, 3;
    

    在 SELECT 列表中,salary 是第 2 个字段,hire_date 是第 3 个字段。因此该语句也是先按照月薪从高到低排序,月薪相同时再按照入职先后进行排序。

    接下来我们讨论一类特殊的排序问题:中文排序。

    中文排序

    在创建数据库或者表时,我们会指定一个字符集(Charset)和排序规则(Collation)。

    字符集决定了数据库能够存储哪些字符,比如 ASCII 字符集只能存储简单的英文、数字和一些控制字符;GB2312 字符集可以存储中文;Unicode 字符集能够支持世界上的各种语言。

    排序规则定义了字符集中字符的排序顺序,包括是否区分大小写,是否区分重音等。对于中文而言,排序方式与英文有所不同;中文通常需要按照拼音、偏旁部首或者笔画进行排序。

    如果想要支持中文排序,最简单的方式就是使用支持中文排序的排序规则;但是常见的 Unicode 字符集默认不支持中文排序。所以我们需要解决这种情况下的中文排序问题。

    首先是 Oracle,使用 AL32UTF8 字符编码时不支持中文排序规则,可以通过一个转换函数实现该功能。以下示例按照员工姓名的拼音进行排序:

    -- Oracle 实现中文拼音排序
    SELECT emp_name
      FROM employee
     WHERE dept_id = 4
     ORDER BY NLSSORT(emp_name,'NLS_SORT = SCHINESE_PINYIN_M');
    

    NLSSORT 是一个函数,返回了按照某种排序规则得到的字符序列;SCHINESEPINYINM 表示中文的拼音排序规则。该查询的结果如下:

    avatar

    Oracle 还支持按偏旁部首进行排序:SCHINESERADICALM,以及按笔画进行排序:SCHINESESTROKEM。

    再来看一下 MySQL 的中文排序。MySQL 8.0 默认使用 utf8mb4 字符编码,不支持中文排序规则。以下语句按照员工姓名的拼音进行排序:

    -- MySQL 实现中文拼音排序
    SELECT emp_name
      FROM employee
     WHERE dept_id = 4
     ORDER BY CONVERT(emp_name USING GBK);
    

    CONVERT 是一个函数,用于转换数据的字符集编码;这里是中文 GBK 字符集,默认使用拼音排序。该语句的结果和上面的 Oracle 示例一样。

    对于 SQL Server,字符集和排序规则是同一个概念。如果需要存储中文,需要使用相应的排序规则,例如 ChinesePRCCSAIWS。以下查询按照员工姓名的拼音进行排序:

    -- SQL Server 实现中文拼音排序
    SELECT emp_name
      FROM employee
     WHERE dept_id = 4
     ORDER BY emp_name COLLATE Chinese_PRC_CI_AI_WS;
    

    COLLATE 表示按照某种排序规则进行排序;如果数据库使用的是 ChinesePRCCIAIWS 排序规则,可以省略 COLLATE 选项。该语句的结果和上面的 Oracle 示例一样。

    SQL Server 还支持按笔画进行排序:ChinesePRCStrokeCIAI_WS。

    最后,PostgreSQL 默认使用 UTF8 编码字符集,不支持中文排序规则。以下示例按照员工姓名的拼音进行排序:

    -- PostgreSQL 实现中文拼音排序
    SELECT emp_name
      FROM employee
     WHERE dept_id = 4
     ORDER BY emp_name COLLATE "zh_CN";
    

    COLLATE 指定了中文排序规则 zh_CN,该语句的结果和上面的 Oracle 示例一样。

    对于排序操作,还需要注意空值的排序问题。

    空值排序

    空值(NULL)在 SQL 中表示未知或者缺失的值。如果排序的字段中存在空值时,应该如何处理呢?以下语句按照奖金从低到高进行排序:

    SELECT emp_name, bonus
      FROM employee
     WHERE dept_id = 2
     ORDER by bonus;
    

    在 MySQL 和 SQL Server 中空值排在了最前,查询的结果如下:

    avatar

    avatar

    对于 Oracle 和 PostgreSQL 而言,也可以使用 NULLS FIRST 将空值排在最前,或者 NULLS LAST 将空值排在最后。以下语句返回的结果与 MySQL 和 SQL Server 一致:

    -- Oracle 和 PostgreSQL 实现
    SELECT emp_name, bonus
      FROM employee
     WHERE dept_id = 2
     ORDER by bonus NULLS FIRST;
    

    总而言之:

    • MySQL 和 SQL Server 认为空值最小,升序时空值排在最前,降序时空值排在最后;
    • Oracle 和 PostgreSQL 认为空值最大,升序时空值排在最后,降序时空值排在最前;同时支持使用 NULLS FIRST 和 NULLS LAST 指定空值的顺序。

    解决空值的排序问题还有一个更通用的方法,就是利用 COALESCE 函数将空值转换为一个指定的值。例如,将奖金为空的数据转换为 0,这样升序排序时一定在最前:

    SELECT emp_name, COALESCE(bonus, 0) AS bonus
      FROM employee
     WHERE dept_id = 2
     ORDER BY COALESCE(bonus, 0);
    

    该语句的执行结果如下:

    avatar

    COALESCE 函数用于将 bonus 为空的数据转换为 0,关于空值处理的函数将会在第 15 篇中进行介绍。

    小结

    ORDER BY 子句可以将查询的结果按照某种规则进行排序。排序方式分为升序和降序;可以基于单列或表达式排序,也可以基于多列或多个表达式排序。中文排序需要字符集和排序规则的支持,不同数据库的实现各不相同。另外,还需要注意空值的排序问题。

    练习题:查询所有的员工信息,按照员工的总收入(年薪加奖金)从高到低进行排序,总收入相同再按照姓名的拼音顺序排序。

    展开全文
  • 我希望按给定的列(特别是p值)对数据进行排序。但是,问题是我无法将整个数据加载到内存中。因此,以下内容起作用,或者只适用于小数据集。data = data.sort(columns=["P_VALUE"], ascending=True, axis=0)有没有一...
  • 也是一种十分高效的排序方式,虽然其算法模型为二叉树结构,但是可以使用数据进行模拟这个二叉树的结构和相应的函数操作!大根堆和小根堆堆树的定义如下:堆树是一颗完全二叉树堆树的当前节点总是大于或者小于其...
  • 现在我们常用的是ASP重新读取数据然后在进行排序,这样速度很慢,我想能能直接在看护端进行排序呢,经过一段时间的试验,我发现了,如下方法可以实现哈,希望与大家分享,同时也希望各位高手提出意见或补充。...
  • 这两个条件是比较苛刻,可不可以变通一下呢?当然有,今天我们聊一聊桶排序。生活中的桶排序在统计中,如果数据比较多,最容易想到的是分段排列统计。比如,如果要统计排列一个中学的男性身高,我们不可能从0~250c.....
  • 概述使用FME可以多种方式表格数据进行排序。您可以使用FME Data Inspector属性进行整理,以手动列进行排序,也可以在Workbench中使用Sorter转换器。Sorter函数类似于SQL函数:ORDER BY。在本教程中,您将学习...
  • 1、先说List集合List集合在存数据时是可以重复的但是 当我们需要判断一个对象是否在集合中存在时这样就有问题了!因为我们通常判断一个对象是否在集合中存在只需要判断值就行 而List内部实现方法是用地址来进行判断的...
  • 一组数据进行递增排序并输出工作中的一个需求分析具体处理过程1 检查2 排序3 替换结尾 工作中的一个需求 工作中遇到一个需求,文章中各组数据进行检查,看数据是否符合递增排列。如果符合,要给出新排列后的...
  • 常见的内排序算法所谓的内排序是指所有的数据已经读入内存,在内存中进行排序的算法。排序过程中需要磁盘进行读写。同时,内排序也一般假定所有用到的辅助空间也可以直接存在于内存中。与之对应地,另一类排序...
  • 所以,我有一个字符串列表,这些字符串的格式都是Month DayNumber,比如['March 1', 'March 9', 'April 14', 'March 12']我需要列表进行排序,以便所有日期都按日历中的顺序排列。有什么小窍门吗?是否有内置方法...
  • 举一反三,触类旁通,能否实现按照指定的name进行排序? 比如,我需要按照以id顺序,status倒序? 问题的解决 使用一个order函数就能解决,需要连续使用。 具体写法,如上述的要求,可以这么写: order('id, ...
  • 对于插入数据库的数据进行查询操作,查出后一般是乱序的,就需要想个办法进行数据的重组排序,对于原生 sql 脚本,这似乎并不是什么难事,只要在查询时,按照(自己想要排的)字段的值大小就可以做到,使用格式:order...
  • java中的静态变量---static用static修饰符修饰的数据成员,并是属于那个对象的,而是属于类.静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好. 当然它也是被保存到类的方法中的,而不是对象内存中,...
  • 编程珠玑上说道: ...源文件大约是40M,所以把源文件分成40分,每份通过快排得到有序,之后40份有序文件进行归并排序。 声明一个40个大小的临时数据,一次存入每个文件的头一个数字,然后通过最小堆,把第一
  • 在标准SQL中,如果使用Group by,select字段中只能返回group by的字段或者其他字段的聚合(Min,Max等);...最常用的需求是“在窗口函数中进行排序,然后根据排序结果筛选获取”;在SQL中,可以使用ROW_NUM...
  • (2)比较了两个节点的大小后,只交换数据域,而改变指针,从而交换节点的顺序。 第二种办法比较简单,本文主要第二种方法进行讲解。 链表节点排序算法,采用(冒泡排序)。 定义一个指针end,end最开始时赋值为...
  • 1 ORDER BY可使用SELECT语句...如果不排序数据一般将以它在底层表中出现的顺序显示。这可以数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此...
  • 在标准SQL中,如果使用Group by,select字段中只能返回group by的字段或者其他字段的聚合(Min,Max等);...最常用的需求是“在窗口函数中进行排序,然后根据排序结果筛选获取”;在SQL中,可以使用ROW_NUM...
  • 写一个方法任意引用数据类型数组进行排序。 具体要求如下: 1)方法声明为public void sortArr(Object arr[]){ } 2)方法中首先输出排序前数组内容,然后进行排序,最后输出排序后数组内容。 3)可以是冒泡排序或其他...
  • 在MySQL中,从表中查询出的数据可能是无序的,或者其排列顺序不是用户所期望的顺序,为了使查询结果的顺序满足用户的要求,可以使用关键字ORDER BY记录进行排序,其语法形式如下: SELECT field1, fie
  • 我们可以通过许多排序技术LinkedList进行排序: 气泡排序 插入排序 快速分类 合并排序 方法1:使用冒泡排序进行排序 为了完成此任务,我们维护两个指针:current和index。 最初,当前指向头节点,索引将指向...
  • 在标准SQL中,如果使用Group by,select字段中只能返回...最常用的需求是“在窗口函数中进行排序,然后根据排序结果筛选获取”; 在SQL中,可以使用ROW_NUMBER OVER(partition by order by )实现; 在Mysql中没有ro
  • 对数据进行排序的时候直接通过数据库查询 order by 排序的时候,发现当字段属性为varchar的时候,排序效果并理想。学习总结以下两种方式 mysql排序字段为汉字 可以在查询语句的 order by 部分使用 CONVERT 函数 ...
  • DBGrid的数据进行排序和过滤

    千次阅读 2006-03-19 16:52:00
    这个是显示数据常用的操作,按道理看看CB的帮助就很容易找到答案,可是还有很多的人利用构造新的SQL重新检索的方法实现,实在是非~常~的理解,利用ADO控件的Sort、Filter或者ClientDataSet的index、filter可以很...
  • 此方法可以直接套用,在拿到实体类列表后,如果方便去数据库再去排序可以用此方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,097
精华内容 2,038
关键字:

不可以对数据进行排序