zoukankan      html  css  js  c++  java
  • 数组排序

    一直都对数组排序有点混淆不清,今天闲下来硬是找了些资料好好补课一下,感觉如下这篇还不错,于是转过来了。

    reverse()、sort() 和 sortOn()

    reverse() 倒序排列
    sort() 按照多种预定义的方式对数组进行排序,甚至可用来创建自定义排序算法。
    sortOn() 方法可用来对对象的索引数组进行排序,这些对象具有一个或多个可用作排序键的公共属性。
    sort() 方法按照"默认排序顺序"重新安排数组中的元素。默认排序顺序具有以下特征:

    排序区分大小写,也就是说大写字符优先于小写字符。例如,字母 D 优先于字母 b。
    排序按照升序进行,也就是说低位字符代码(例如 A)优先于高位字符代码(例如 B)。
    排序将相同的值互邻放置,并且不区分顺序。
    排序基于字符串,也就是说,在比较元素之前,先将其转换为字符串(例如,10 优先于 3,
    因为相对于字符串 "3" 而言,字符串 "1" 具有低位字符代码)。
    您也许需要不区分大小写或者按照降序对数组进行排序,或者您的数组中包含数字,
    从而需要按照数字顺序而非字母顺序进行排序。

    sort() 方法具有 options 参数,可通过该参数改变默认排序顺序的各个特征。
    options 是由 Array 类中的一组静态常量定义的,如以下列表所示:

    Array.CASEINSENSITIVE:此选项可使排序不区分大小写。例如,小写字母 b 优先于大写字母 D。
    Array.DESCENDING:用于颠倒默认的升序排序。例如,字母 B 优先于字母 A。
    Array.UNIQUESORT:如果发现两个相同的值,此选项将导致排序中止。
    Array.NUMERIC:这会导致排序按照数字顺序进行,比方说 3 优先于 10。

    如:

       1: var poets:Array = ["Blake", "cummings", "Angelou", "Dante"]; 
       2: poets.sort(); // CuPlayer.com提示:默认排序 
       3: trace(poets); // 输出:Angelou,Blake,Dante,cummings 
       4:  
       5: poets.sort(Array.CASEINSENSITIVE); 
       6: trace(poets); // 输出:Angelou,Blake,cummings,Dante 
       7:  
       8: poets.sort(Array.DESCENDING); 
       9: trace(poets); // 输出:cummings,Dante,Blake,Angelou 
      10:  
      11: poets.sort(Array.DESCENDING | Array.CASEINSENSITIVE); // 使用两个选项 
      12: trace(poets); // 输出:Dante,cummings,Blake,Angelou 
     

    可以编写自定义排序函数,然后将其作为参数传递给 sort() 方法。

    如,以下按第二个单词排序,而不是第一个单词排序

    以下代码展示如何编写自定义排序函数,函数内部可以不理会。

       1: var names:Array = new Array("John Q. Smith", "Jane Doe", "Mike Jones"); 
       2: function orderLastName(a, b):int 
       3: { 
       4:     var lastName:RegExp = /S+$/; 
       5:     var name1 = a.match(lastName); 
       6:     var name2 = b.match(lastName); 
       7:     if (name1 < name2) 
       8:     { 
       9:         return -1; 
      10:     } 
      11:     else if (name1 > name2) 
      12:     { 
      13:         return 1; 
      14:     } 
      15:     else 
      16:     { 
      17:         return 0; 
      18:     } 
      19: } 
      20: trace(names); // 输出:John Q. Smith,Jane Doe,Mike Jones 
      21: names.sort(orderLastName); 
      22: trace(names); // 输出:Jane Doe,Mike Jones,John Q. Smith 
     

    说明下:
    自定义函数作为参数传入sort。其自定义参数必须有2个参数组成。
    因为它每次对两个数组元素进行操作。排序函数的返回值指示应如何对元素排序:

    返回值 -1 表示第一个参数 a 优先于第二个参数 b。
    返回值 1 表示第二个参数 b 优先于第一个参数 a。
    返回值为 0 表示元素具有相同的排序优先级。

    sortOn() 方法是为对象数组而使用。
    对象元素中应具有一个可用作排序键的公共属性。

    如以下数组中的元素是由对象组成。
    以下对象中以姓和年份组成。

       1: var poets:Array = new Array(); 
       2: poets.push({name:"Angelou", born:"1928"}); 
       3: poets.push({name:"Blake", born:"1757"}); 
       4: poets.push({name:"cummings", born:"1894"}); 
       5: poets.push({name:"Dante", born:"1265"}); 
       6: poets.push({name:"Wang", born:"701"}); 
    
    

    使用 sortOn() 方法,按born 属性对数组进行排序。
    sortOn() 带两个参数 fieldName 和 options。

    如,使用两个参数 "born" 和 Array.NUMERIC 来调用 sortOn()。
    Array.NUMERIC 参数用于确保按照数字顺序进行排序,

       1: poets.sortOn("born", Array.NUMERIC); 
       2: for (var i:int = 0; i < poets.length; ++i) 
       3: { 
       4:     trace(poets[i].name, poets[i].born); 
       5: } 
       6: /* 输出: 
       7: Wang 701 
       8: Dante 1265 
       9: Blake 1757 
      10: cummings 1894 
      11: Angelou 1928 
      12: */ 
     

    当在sort() 和 sortOn()中使用
    Array.RETURNINDEXEDARRAY 常量作为 options 参数。
    会对数组排序而又不修改现有数组。

    如:

       1: var indices:Array; 
       2: //CuPlayer.com提示说明 
       3: //indices 为poets元素排序后的元素索引数组, 
       4: indices = poets.sortOn("born", Array.NUMERIC | Array.RETURNINDEXEDARRAY); 
       5: for (var i:int = 0; i < indices.length; ++i) 
       6: { 
       7:     var index:int = indices[i]; 
       8:     trace(poets[index].name, poets[index].born); 
       9:     } 

      源地址为:http://www.cuplayer.com/player/PlayerCodeAs/2013/0306738.html

  • 相关阅读:
    python2和3使用pip时的问题
    Python爬虫-爬取百度贴吧帖子
    Python爬虫-爬取糗事百科段子
    keras例子-matchnet
    win10-Anaconda2-Theano-cuda7.5-VS2013
    caffe-win10-cifar10另
    PHP——0126最初
    PHP——动态随机数
    PHP——投票
    PHP——内测:联系人管理
  • 原文地址:https://www.cnblogs.com/lweinking/p/3972517.html
Copyright © 2011-2022 走看看