`

Array的SortOn排序

    博客分类:
  • Flex
阅读更多
sortOn () 方法   

AS3 function sortOn(fieldName:Object, options:Object = null):Array

语言版本 :  ActionScript 3.0 
RuntimeVersions:  AIR 1.0, Flash Player 9 



根据数组中的一个或多个字段对数组中的元素进行排序。数组应具有下列特性: 

该数组是索引数组,不是关联数组。
该数组的每个元素都包含一个具有一个或多个属性的对象。
所有这些对象都至少有一个公用属性,该属性的值可用于对该数组进行排序。这样的属性称为 field。
如果您传递多个 fieldName 参数,则第一个字段表示主排序字段,第二个字段表示下一个排序字段,依此类推。Flash 根据 Unicode 值排序。(ASCII 是 Unicode 的一个子集。) 如果所比较的两个元素中均不包含 fieldName 参数中指定的字段,则认为将该字段设置为 undefined,在排序后的数组中将连续放置这些元素,不必遵循任何特定顺序。

默认情况下,Array。sortOn() 按以下方式进行排序:

排序区分大小写(Z 优先于 a)。
按升序排序(a 优先于 b)。 
修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。
数值字段按字符串方式进行排序,因此 100 优先于 99,因为 "1" 的字符串值比 "9" 的低。
Flash Player 7 添加了 options 参数,您可以使用该参数覆盖默认排序行为。若要对简单数组(例如,仅具有一个字段的数组)进行排序,或要指定一种 options 参数不支持的排序顺序,请使用 Array.sort()。

若要传递多个标志,请使用按位“或”(|) 运算符分隔它们:

  my_array.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC);
  Flash Player 8 添加了按多个字段进行排序时为每个字段指定不同的排序选项的功能。在 Flash Player 8 和更高版本中,options 参数接受排序选项的数组,以便每个排序选项对应于 fieldName 参数中的一个排序字段。下例使用降序排序对主排序字段 a 排序,使用数字排序对第二个排序字段 b 排序,使用不区分大小写的排序对第三个排序字段 c 排序:

  Array.sortOn (["a", "b", "c"], [Array.DESCENDING, Array.NUMERIC, Array.CASEINSENSITIVE]);
  注意:fieldName 和 options 数组必须具有相同数量的元素;否则,将忽略 options 数组。此外,Array.UNIQUESORT 和 Array.RETURNINDEXEDARRAY 选项只能用作数组中的第一个元素;否则,将忽略它们。


参数  fieldName:Object — 一个字符串,它标识要用作排序值的字段,或一个数组,其中的第一个元素表示主排序字段,第二个元素表示第二排序字段,依此类推。  
  
 options:Object (default = null) — 所定义常数的一个或多个数字或名称,相互之间由 bitwise OR (|) 运算符隔开,它们可以更改排序行为。options 参数可接受以下值: 
Array.CASEINSENSITIVE 或 1
Array.DESCENDING 或 2
Array.UNIQUESORT 或 4
Array.RETURNINDEXEDARRAY 或 8
Array.NUMERIC 或 16
 



返回 Array — 返回值取决于您是否传递任何参数: 
如果您为 options 参数指定值 4 或 Array.UNIQUESORT,并且要排序的两个或多个元素具有相同的排序字段,则返回值 0 并且不修改数组。 
如果为 options 参数指定值 8 或 Array.RETURNINDEXEDARRAY,则返回反映排序结果的数组并且不修改数组。
否则,不返回任何结果并修改该数组以反映排序顺序。
 

另请参见

| (bitwise OR)
Array.sort()

示例 


下面的代码创建一个空的 Array 对象 vegetables,然后通过五次调用如下方法来填充该数组:push()。每次调用 push() 时,都创建一个新的 Vegetable 对象(通过调用 Vegetable() 构造函数,该构造函数接受 String (name) 和 Number (price) 对象)。使用所显示的值调用 push() 五次,会生成下面的数组:[lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44]。然后,使用 sortOn() 方法(使用 name 参数)获得以下数组:[asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44]。然后,使用 price 参数及 NUMERIC 和 DESCENDING 常数再次调用 sortOn() 方法,以得到按数字降序排序的数组:[asparagus:3.99, spinach:1.89, lettuce:1.49, squash:1.44, celery:1.29]。 

var vegetables:Array = new Array();
vegetables.push(new Vegetable("lettuce", 1.49));
vegetables.push(new Vegetable("spinach", 1.89));
vegetables.push(new Vegetable("asparagus", 3.99));
vegetables.push(new Vegetable("celery", 1.29));
vegetables.push(new Vegetable("squash", 1.44));

trace(vegetables);
// lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44

vegetables.sortOn("name");
trace(vegetables);
// asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44

vegetables.sortOn("price", Array.NUMERIC | Array.DESCENDING);
trace(vegetables);
// asparagus:3.99, spinach:1.89, lettuce:1.49, squash:1.44, celery:1.29

class Vegetable {
    public var name:String;
    public var price:Number;

    public function Vegetable(name:String, price:Number) {
        this.name = name;
        this.price = price;
    }

    public function toString():String {
        return " " + name + ":" + price;
    }
}

下面的代码创建一个空的 Array 对象 records,然后通过三次调用如下方法来填充该数组:push()。每次调用 push() 时,将字符串 name 和 city 以及 zip 数字添加到 records。使用三个 for 循环输出数组元素。第一个 for 循环将按元素的添加顺序输出元素。第二个 for 循环在先按名称后按城市对 records 进行排序后运行,排序时使用 sortOn() 方法。第三个 for 循环生成不同的输出,因为 records 先按城市,再按名称重新排序。 


var records:Array = new Array();
records.push({name:"john", city:"omaha", zip:68144});
records.push({name:"john", city:"kansas city", zip:72345});
records.push({name:"bob", city:"omaha", zip:94010});

for(var i:uint = 0; i < records.length; i++) {
    trace(records[i].name + ", " + records[i].city);
}
// Results:
// john, omaha
// john, kansas city
// bob, omaha

trace("records.sortOn('name', 'city');");
records.sortOn(["name", "city"]);
for(var i:uint = 0; i < records.length; i++) {
    trace(records[i].name + ", " + records[i].city);
}
// Results:
// bob, omaha
// john, kansas city
// john, omaha

trace("records.sortOn('city', 'name');");
records.sortOn(["city", "name"]);
for(var i:uint = 0; i < records.length; i++) {
    trace(records[i].name + ", " + records[i].city);
}
// Results:
// john, kansas city
// bob, omaha
// john, omaha


下面的代码创建一个空的 Array 对象 users,然后通过四次调用如下方法来填充该数组:push()。每次调用 push() 时,都创建一个 User 对象(使用 User() 构造函数),同时将 name 字符串和 age uint 添加到用户。生成的数组集为 [Bob:3,barb:35,abcd:3,catchy:4]。 
然后按以下方式对数组进行排序: 

仅按姓名排序,得到数组 [Bob:3,abcd:3,barb:35,catchy:4]
按姓名排序并使用 CASEINSENSITIVE 常数,得到数组 [abcd:3,barb:35,Bob:3,catchy:4]
按姓名排序并使用 CASEINSENSITIVE 和 DESCENDING 常数,得到数组 [catchy:4,Bob:3,barb:35,abcd:3]
仅按年龄排序,得到数组 [abcd:3,Bob:3,barb:35,catchy:4]
按年龄排序并使用 NUMERIC 常数,得到数组 [Bob:3,abcd:3,catchy:4,barb:35]
按年龄排序并使用 DESCENDING 和 NUMERIC 常数,得到数组 [barb:35,catchy:4,Bob:3,abcd:3]

然后,创建一个名为 indices 的数组,并将按年龄排序并使用 NUMERIC 和 RETURNINDEXEDARRAY 常数的结果赋予该数组,从而得到数组 [Bob:3,abcd:3,catchy:4,barb:35],然后使用 for 循环输出该数组。


class User {
    public var name:String;
    public var age:Number;
    public function User(name:String, age:uint) {
        this.name = name;
        this.age = age;
    }

    public function toString():String {
        return this.name + ":" + this.age;
    }
}

var users:Array = new Array();
users.push(new User("Bob", 3));
users.push(new User("barb", 35));
users.push(new User("abcd", 3));
users.push(new User("catchy", 4));

trace(users); // Bob:3,barb:35,abcd:3,catchy:4

users.sortOn("name");
trace(users); // Bob:3,abcd:3,barb:35,catchy:4

users.sortOn("name", Array.CASEINSENSITIVE);
trace(users); // abcd:3,barb:35,Bob:3,catchy:4

users.sortOn("name", Array.CASEINSENSITIVE | Array.DESCENDING);
trace(users); // catchy:4,Bob:3,barb:35,abcd:3

users.sortOn("age");
trace(users); // abcd:3,Bob:3,barb:35,catchy:4

users.sortOn("age", Array.NUMERIC);
trace(users); // Bob:3,abcd:3,catchy:4,barb:35

users.sortOn("age", Array.DESCENDING | Array.NUMERIC);
trace(users); // barb:35,catchy:4,Bob:3,abcd:3

var indices:Array = users.sortOn("age", Array.NUMERIC | Array.RETURNINDEXEDARRAY);
var index:uint;
for(var i:uint = 0; i < indices.length; i++) {
    index = indices[i];
    trace(users[index].name, ": " + users[index].age);
}

// Results:
// Bob : 3
// abcd : 3
// catchy : 4
// barb : 35
 
分享到:
评论

相关推荐

    php自定义二维数组排序函数array_orderby用法示例

    本文实例讲述了php自定义... This does what example 3 does, except it takes care of creating those intermediate arrays for you before passing control on to array_multisort(). */ function array_orderby() {

    JavaScript对JSON数组简单排序操作示例

    本文实例讲述了JavaScript对JSON数组简单排序操作。分享给大家供大家参考,具体如下: 我们经常回使用到数据格式 var arr=[{num:1},{num:3},{...arrayObject.sort(sortby) 参数 描述 sortby 可选。规定排序顺序。

    C#实现对二维数组排序的方法

    /// A generic routine to sort a two dimensional array of a specified type based on the specified column. /// /// &lt;param name=array&gt;The array to sort. /// &lt;param name=sortCol&gt;The index of the column ...

    CUDA并行排序(1)——整数

    A small-set insertion sort. We do this on any set with // 2. A partitioning kernel, which - given a pivot - separates an input // array into elements , and &gt;pivot. Two quicksorts will then // be ...

    sort-stream2:流的 Array.prototype.sort

    排序流2 Array.prototype.sort 用于流,刷新的 。 小心使用,因为排序需要缓冲整个流。例子 var sort = require ( "sort-stream2" )var through = require ( "through2" )var objs = through . obj ( )objs . write ...

    用汇编编写的10个数的冒泡排序

    Write a program to sort an array using bubble sort. Home work should be submitted as rollno.s in the folder on Indus/common. It will be tested in the next lab.

    array-methods-lab-online-web-prework

    使用#sort方法对数组进行排序。 使用#reverse方法反转数组的内容。 使用#first和#last方法在数组中查找第一个和最后一个元素。 使用#size方法确定数组的大小或长度。 指示 在本实验中,我们将在方法主体中为上述每个...

    小根堆的插入排序等相关算法的实现

    《算法设计技巧与分析》...•Design and implement Heapsort1 algorithm based on minmal heap to sort an array in nonascending order; •Implement algorithm 4.6 and 4.7, test the implementation on example 4.4

    array-methods-lab-online-web-sp-000

    使用#sort方法对数组进行排序。使用#reverse方法反转数组的内容。使用#first和#last方法在数组中查找第一个和最后一个元素。使用#size方法确定数组的大小或长度。指示在本实验中,我们将在方法主体中为上述每个任务...

    visual-sort:一个可视化排序算法(或任何数组操作)的 Java 框架。 可用作比较不同方法的教具

    概要:一个简单的 Java 框架,允许用户在排序(或以其他方式处理)时可视化整数元素数组。 允许用户通过接口定义自己的算法来处理数组。... creates an integer array with as many elements as will fit on your

    cpp-算法精粹

    仅仅是作为搬运工。...Max Points on a Line Community QQ 群: 237669375 Github: https://www.github.com/soulmachine/algorithm-essentials 微博: @灵魂机器 License Book License: CC BY-SA 3.0 License

    牛客的代码leetcode代码区别-coding-study:使用leetcode、niuke等编码

    on 1、base (基础) Here are some easy examples to study DataStructure and Algorithm Algorithm (算法部分) Sort (排序) Search (搜索) Recursion (递归) DataStructure (数据结构) List (线性表) ...

    Linq基础学习资料,通俗易懂

    目录 1 LINQ查询结果集 1 2 System.Array 数组 1 2.1 基于System.Array定义数组 1 2.2 基于类型定义数组 1 ...8.4 join in on equals 联合查询 33 8.5 into 汇总 33 9 DataSource 数据绑定 34

    inventoryapplication:存货申请

    库存申请 用于排序和输入项目的库存应用程序。 怎么跑 键入npm i以安装依赖项。 依赖关系 ...2. added search feature to sort items based on user input. 资源 颜色和字体 RGBA 18 40 76 1 HEX #12284c

    PHP基础教程 是一个比较有价值的PHP新手教程!

    其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar-&gt;do_foo(); 改变变量...

    javascript文档

    @cc_on 语句 激活条件编译支持。 @if 语句 根据表达式的值,有条件地执行一组语句。 @set 语句 创建用于条件编译语句的变量。 abs 方法 返回一个数的绝对值。 acos 方法 返回一个数的反余弦。 ActiveXObject ...

    JScript 语言参考

    @cc_on 语句 激活条件编译支持。 @if 语句 根据表达式的值,有条件地执行一组语句。 @set 语句 创建用于条件编译语句的变量。 abs 方法 返回一个数的绝对值。 acos 方法 返回一个数的反余弦。 ActiveXObject ...

    微软JavaScript手册

    @cc_on 语句 激活条件编译支持。 @if 语句 根据表达式的值,有条件地执行一组语句。 @set 语句 创建用于条件编译语句的变量。 abs 方法 返回一个数的绝对值。 acos 方法 返回一个数的反余弦。 ActiveXObject ...

    ZJU_ACM_All_Anwer 搞编程的都知道的浙江大学A 题库.本书 集了所有经 Z 题解集,集合并附 Mathimaticsumerical algorithms 数值算法

    1276 Optimal Array Multiplication Sequence 简单题 1255 The Path 简单题 1250 Always On the Run 简单题 1213 Lumber Cutting 简单题 1206 Win the Bonus 简单题 1479 Dweep 无聊题 1587 UP 100 ...

    浙江大学ACM题解/ZJU 题型分类

    1276 Optimal Array Multiplication Sequence 简单题 1255 The Path 简单题 1250 Always On the Run 简单题 1213 Lumber Cutting 简单题 1206 Win the Bonus 简单题 1479 Dweep 无聊题 1587 UP 100 ...

Global site tag (gtag.js) - Google Analytics