`

Array

    博客分类:
  • as
阅读更多

sort ()

方法

 

对数组中的元素进行排序。此方法按 Unicode 值排序。(ASCII 是 Unicode 的一个子集。)

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

  • 排序区分大小写(Z 优先于 a)。
  • 按升序排序(a 优先于 b)。
  • 修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。
  • 元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。

如果要使用与默认设置不同的设置对数组进行排序,可以使用 ...args 参数说明中 sortOptions 部分所描述的某种排序选项,也可以创建自定义函数来进行排序。如果创建自定义函数,请调用 sort() 方法,并将自定义函数的名称作为第一个参数 (compareFunction)。

 

参数

  ... args — 指定一个比较函数和确定排序行为的一个或多个值的参数。

此方法使用语法和参数顺序 Array.sort(compareFunction, sortOptions),其参数定义如下:

  • compareFunction - 一个用来确定数组元素排序顺序的比较函数。此参数是可选的。比较函数应该用两个参数进行比较。给定元素 A 和 B,compareFunction 的结果可具有以下三个值之一:
    • s-1,如果 A 应在排序后的序列中出现在 B 之前
    • 0,如果 A 等于 B
    • 1,如果 A 应在排序后的序列中出现在 B 之后
  • sortOptions - 一个或多个数字或定义的常数,相互之间由 |(按位 OR)运算符隔开,它们将排序的行为从默认行为更改为其它行为。此参数是可选的。下面是 sortOptions 可接受的值:
    • 1 或 Array.CASEINSENSITIVE
    • 2 或 Array.DESCENDING
    • 4 或 Array.UNIQUESORT
    • 8 或 Array.RETURNINDEXEDARRAY
    • 16 或 Array.NUMERIC
    有关详细信息,请参阅 Array.sortOn() 方法。

注意:Array.sort() 方法是在 ECMAScript (ECMA-262) 第 3 版语言规范中定义的,而数组排序方法是 ECMA-262 的扩展。

 

返回
  Array — 返回值取决于您是否传递任何参数,如以下列表中所述:
  • 如果为 ...args 参数的 sortOptions 变量指定值 4 或 Array.UNIQUESORT,并且所排序的两个或更多个元素具有相同的排序字段,则 Flash 返回值 0 并且不修改数组。
  • 如果为 ...args 参数的 sortOptions 变量指定值 8 或 Array.RETURNINDEXEDARRAY,则 Flash 返回排序后的索引数值数组以反映排序结果,并且不修改数组。
  • 否则,Flash 不返回任何内容并修改该数组以反映排序顺序。

另请参见


示例

下面的代码创建 Array 对象 vegetables,其中包含元素 [spinach, green pepper, cilantro, onion, avocado]。然后,通过 sort() 方法对该数组进行排序,调用该方法时不带参数。结果是 vegetables 按字母顺序排序 ([avocado, cilantro, green pepper, onion, spinach])。
var vegetables:Array = new Array("spinach",
                 "green pepper",
                 "cilantro",
                 "onion",
                 "avocado");

trace(vegetables); // spinach,green pepper,cilantro,onion,avocado
vegetables.sort();
trace(vegetables); // avocado,cilantro,green pepper,onion,spinach

下面的代码创建 Array 对象 vegetables,其中包含元素 [spinach, green pepper, Cilantro, Onion, and Avocado]。然后,通过 sort() 方法对该数组进行排序,第一次调用该方法时不带参数,其结果是 [Avocado,Cilantro,Onion,green pepper,spinach]。然后再次调用 sort()(对 vegetables),调用时将 CASEINSENSITIVE 常数作为参数。结果是 vegetables 按字母顺序排序 ([Avocado, Cilantro, green pepper, Onion, spinach])。
var vegetables:Array = new Array("spinach",
                 "green pepper",
                 "Cilantro",
                 "Onion",
                 "Avocado");

vegetables.sort();
trace(vegetables); // Avocado,Cilantro,Onion,green pepper,spinach
vegetables.sort(Array.CASEINSENSITIVE);
trace(vegetables); // Avocado,Cilantro,green pepper,Onion,spinach

下面的代码创建空的 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]。然后,使用 sort() 方法排序该数组,从而得到数组 [asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44]
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.sort();

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

//The following code defines the Vegetable class
class Vegetable {
    private var name:String;
    private var price:Number;

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

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

下例与前一个示例几乎完全相同,唯一不同的是将 sort() 方法与自定义排序函数 (sortOnPrice) 一起使用,该函数按 price 排序,而不是按字母顺序排序。请注意,新函数 getPrice() 将提取 price。
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.sort(sortOnPrice);

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

function sortOnPrice(a:Vegetable, b:Vegetable):Number {
    var aPrice:Number = a.getPrice();
    var bPrice:Number = b.getPrice();

    if(aPrice > bPrice) {
        return 1;
    } else if(aPrice < bPrice) {
        return -1;
    } else  {
        //aPrice == bPrice
        return 0;
    }
}

// The following code defines the Vegetable class and should be in a separate package.
class Vegetable {
    private var name:String;
    private var price:Number;

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

    public function getPrice():Number {
        return price;
    }

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

下面的代码创建 Array 对象 numbers,其中包含元素 [3,5,100,34,10]。调用 sort() 时如果不带任何参数,将按照字母顺序进行排序,生成不需要的结果 [10,100,3,34,5]。若要对数值进行排序,必须将常数 NUMERIC 传递给 sort() 方法,该方法按以下方式对 numbers 进行排序:[3,5,10,34,100]

注意:sort() 函数的默认行为是将每个实体作为字符串处理。Array.NUMERIC 参数实际上并没有将其它数据类型转换为 Number 数据类型,它只是允许排序算法识别数字。

var numbers:Array = new Array(3,5,100,34,10);

trace(numbers); // 3,5,100,34,10
numbers.sort();
trace(numbers); // 10,100,3,34,5
numbers.sort(Array.NUMERIC);
trace(numbers); // 3,5,10,34,100
分享到:
评论
1 楼 leopard0825 2010-05-27  
默认情况下,Array。sort() 按以下方式进行排序:

排序区分大小写(Z 优先于 a)。
按升序排序(a 优先于 b)。
修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。
元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。

相关推荐

    Array And Phased Array Antenna Basics

    10 Special Array Antenna Configurations 269 10.1 Conformal Array and Phased Array Antennas 269 10.1.1 Circular Sector Array and Phased Array Antenna 270 10.2 Volume Array and Phased Array Antennas 276...

    android数组资源string-array integer-array的用法

    这样的数组可以在布局文件中通过`@array/example_string_array`引用,或者在代码中通过`getStringArray(R.array.example_string_array)`获取。 其次,`integer-array`是用于存储整数数组的资源,它的用法与`string-...

    PV_Array.zip_PV array模块_pv array 仿真_pv arraymatlab_光伏特性_光伏电池

    标题中的“PV_Array.zip”是一个压缩包文件,包含与光伏(Photovoltaic,简称PV)系统相关的材料,特别是关于“PV array”的建模和仿真。"PV array"指的是由多个光伏电池串联或并联组成的光伏阵列,是太阳能发电系统...

    delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换

    ### Delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换 在Delphi编程语言中,字符串和其他与字符相关的数据类型之间的转换是常见的需求。本篇文章将详细介绍如何在这些数据类型之间进行转换,...

    Array AG 9.4 CLI Handbook

    标题《Array AG 9.4 CLI Handbook》指的是《Array AG 9.4命令行接口手册》。这本手册是针对Array Networks公司所生产的一款名为Array AG 9.4的网络设备的CLI(命令行接口)配置指南。CLI是一种常见的网络设备配置...

    Javascript实现Array和String互转换的方法

    在JavaScript中,Array(数组)和String(字符串)的互转换是经常需要掌握的基础知识点,尤其在处理数据时非常实用。本文将详细介绍如何使用JavaScript内置方法来实现数组与字符串之间的转换,其中涉及到了两个重要...

    C# Array和ArrayList,List区别

    ### C# 中 Array、ArrayList 和 List 的区别 在C#编程语言中,处理集合数据时,程序员经常需要根据实际需求选择合适的集合类型。本文将详细解释C#中Array、ArrayList和List之间的区别,并通过示例代码帮助理解这些...

    PVarray.rar_pv阵列_simulink的PVARRAY1_simulink里PV array_光伏simulink_

    在本文中,我们将深入探讨如何使用Simulink进行光伏阵列(PV Array)的仿真,主要基于提供的"PVarray.rar"压缩包中的"PVarray"文件。Simulink是MATLAB环境下的一个强大的动态系统建模工具,尤其适用于电气工程、控制...

    TIA博途中数组Array【】的基本使用方法详解.docx

    ### TIA博途中数组Array【】的基本使用方法详解 #### 一、数组Array【】概述 在TIA博途(Totally Integrated Automation Portal)中,数组(Array)是一种重要的数据结构,它由固定数量且相同数据类型的元素组成。...

    在HP Smart Array控制器上配置阵列

    在HP ProLiant服务器上配置Smart Array控制器阵列是管理和存储数据的关键步骤。该过程涉及使用HP提供的工具和软件对硬盘进行逻辑配置,以形成RAID(冗余阵列独立磁盘)等级,确保数据安全性和提升性能。本文将详细...

    Phased Array Antennas Floquet Analysis

    标题“Phased Array Antennas Floquet Analysis”表明本书主要讨论的主题是关于相控阵天线的Floquet分析。相控阵天线是一种由许多小天线元素组成的阵列,这些元素能够单独或集体地调整其相位和幅度来控制电磁波的...

    Array负载均衡配置

    根据给定的文件信息,以下是关于Array负载均衡配置的知识点: ### Array负载均衡配置基础 #### 1. Array产品概述与优势 - **Array公司简介**:Array Networks成立于2000年,是一家致力于网络与安全解决方案的提供...

    在 HP Smart Array 控制器上配置阵列参考指南.pdf

    配置 HP Smart Array 控制器阵列参考指南 HP Smart Array 控制器是一种高性能的存储控制器,广泛应用于 HP 的服务器产品线中,如 HP ProLiant 服务器。为了帮助用户更好地配置和管理 HP Smart Array 控制器,以下是...

    php提示Warning:mysql_fetch_array() expects的解决方法

    在mysql数据库连接时碰到Warning: mysql_fetch_array() expects …错误提示,根据我的经验这个是sql返回的query为空了,我们没有加己判断直接使用了. mysql_fetch_array()函数导致的,下面我们一起来看问题解决方案,我...

    init_array教程

    在Linux和类Unix系统中,`init_array`是ELF(Executable and Linkable Format)文件类型的一部分,它是一个特殊的段,用于存放程序启动时需要执行的一系列初始化函数指针。这个教程将深入探讨`init_array`的概念、...

    Array.Copy 方法

    `Array.Copy`方法是.NET框架中的一个非常重要的成员,它属于`System.Array`类,用于在数组之间高效地复制元素。这个方法提供了多种重载形式,以适应不同的需求,包括处理不同类型和大小的索引以及数组长度。接下来,...

    pv_array.rar_PV array_solar array_光伏阵列_太阳能_太阳能 matlab

    **光伏阵列(PV Array)** 光伏阵列是太阳能发电系统的核心部分,它由多个光伏电池片连接组成,能够将太阳光转化为电能。在太阳能技术中,光伏效应是实现这一转换的基础,当太阳光照射到半导体材料上时,会激发电子...

    HP Array Configuration Utility(ACU)9.40.12.0

    HP Array Configuration Utility(ACU) 用于 Windows 64 位的 HP ProLiant 阵列配置实用程序 HP Array Configuration Utility 是一种有助于每只 HP ProLiant SMART-2 阵列控制器、HP ProLiant 智能阵列控制器、HP ...

    HP Smart Array P400阵列卡配置阵列的方法.doc

    HP Smart Array P400 阵列卡配置阵列的方法 HP Smart Array P400 阵列卡是一款高性能的阵列卡,广泛应用于 HP 服务器中,例如 HP PROLIANT DL580G4 和 ML570G4 等机型。本文档将详细介绍如何使用 HP Smart Array ...

Global site tag (gtag.js) - Google Analytics