`

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
 
分享到:
评论

相关推荐

    flex 数组排序

    `sortOn` 是Flex中Array类的一个方法,用于对数组进行排序。它可以按照指定的属性名或索引进行排序,并且支持多种排序方式。 ##### 2. Array 类型 Flex中的Array类是用于存储和操作元素的容器。它可以存储任意类型...

    常用排序算法分析与实现(Java版)

    public void shellSort(E[] array) { int gap = array.length / 2; while (gap &gt; 0) { for (int i = gap; i &lt; array.length; i++) { E temp = array[i]; int j = i; while (j &gt;= gap && array[j - gap]....

    javascript 的几种排序方法

    另外,JavaScript提供了`Array.prototype.sortOn()`,虽然不是标准方法,但在某些库(如Dojo)中可用。它可以接受属性名或路径,对对象数组按照指定属性排序: ```javascript let people = [ { name: 'Alice', age...

    OJ_整型字符串排序

    在编程领域,"OJ"通常指的是在线判题系统(Online Judge),这是一个用于测试和评估程序员代码正确性的平台。在这个特定的题目“OJ_整型字符串排序”中,我们面临的是一个关于整型字符串排序的挑战。由于描述中提到...

    C#快速排序算法实现

    // Partition function to rearrange the array based on pivot private int Partition(int low, int high) { int pivot = arr[high]; // Choosing the last element as pivot int i = (low - 1); // Index of ...

    基于 Java 的堆排序.pdf

    堆排序(Heap Sort)是一种高效的排序算法,它主要依赖于一种特殊的数据结构——堆。堆是一种特殊的完全二叉树,其中每个父节点的值都满足某种特定的条件与其子节点的值相比。根据这个条件的不同,堆可以分为大顶堆...

    excel vba七种排序

    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .Sort.Apply End With End Sub ``` 6. **使用`Collection`对象配合`Dictionary`对象** 结合`Dictionary`对象,可以实现更复杂的排序...

    c语言经典排序算法(8种-含源代码)

    // The main function to sort an array of given size void heapSort(int arr[], int n) { // Build heap (rearrange array) for (int i = n / 2 - 1; i &gt;= 0; i--) heapify(arr, n, i); // One by one ...

    七种排序方式

    选择排序是一种简单直观的排序算法,它的基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。...

    Excel-VBA实用技巧范例-排序数据.zip

    使用`Array()`函数创建数组,然后使用`Sort`函数(非Excel对象的Sort)对数组排序,最后再用`Range.Value = Array`将排序后的数据写回。 7. **工作表事件**:可以编写代码响应工作表的某些事件,如`Worksheet_...

    jquery无刷新分页.排序

    let data = Array.from($('tbody tr')).map(row =&gt; ({ key: $(row).find('td[data-key="' + key + '"]').text(), row: row })).sort((a, b) =&gt; (order === 'asc' ? 1 : -1) * a.key.localeCompare(b.key)); $...

    HarmonyOS应用开发--排序练习.docx

    - **dateSort 方法**:实现简单的冒泡排序算法,对`txtArray`数组进行排序。 - **sortClick 方法**:调用`dateSort`方法进行排序。 #### 五、样式设计 项目的样式使用了HarmonyOS的标准CSS语法进行定义,主要包括...

    堆排序C语言和java语言

    // code for heapify and sort } int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int n = sizeof(arr)/sizeof(arr[0]); heapSort(arr, n); printf("Sorted array: \n"); for (int i=0; i; ++i) printf("%...

    使用sortable进行拖动排序的demo

    例如,`onUpdate`事件会在排序完成后触发,我们可以在这里获取到新的排序列表: ```javascript new Sortable(mySortableList, { // ... onUpdate: function(event) { var newOrder = Array.from(event.target....

    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 ...

    js 表格排序

    同时,它应该有良好的性能优化,比如使用`Array.prototype.sort()`对大型数据集进行排序。 6. **实际应用**: 在实际项目中,`tablesort.js`常与服务器端数据交互配合,例如通过Ajax获取动态数据,或者在排序后...

    jquery模拟字母顺序排序定位城市列表方法

    2. **排序城市**:使用`Array.prototype.sort()`函数,结合`String.prototype.toLowerCase()`和`String.prototype.charCodeAt()`对城市名称进行排序: ```javascript cities.sort(function(a, b) { return a.name...

    javascript直接排序

    1. `Array.prototype.sort()`:JavaScript 提供了一个内置的方法 `sort()`,可以对数组中的元素进行排序。默认情况下,它按照字典顺序(升序)排列元素,但也可以通过传递一个比较函数来实现自定义排序。 2. 自定义...

    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 ...

    jquery产品图片带动画列表排序代码

    在JavaScript中,我们可以使用`Array.sort()`方法,结合比较函数来定义排序规则。 ### 5. 动画效果 在切换图片位置时,我们希望加入动画效果以提高用户体验。可以使用jQuery的动画方法,如`fadeOut()`和`fadeIn()`...

Global site tag (gtag.js) - Google Analytics