[ActionScript 3.0] 对数组中的元素进行排序Array.sort()的方法

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

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

1. 排序区分大小写(Z优先于a)。

2. 按升序排序(a优先于b)。

3. 修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。

4. 元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。

如果要使用与默认设置不同的设置对数组进行排序,可以使用...args参数说明中sortOptions部分所描述的某种排序选项,也可以创建

自定义函数来进行排序。 如果创建自定义函数,请调用sort()方法,并将自定义函数的名称作为第一个参数 (compareFunction)。

参数

 

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

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

*compareFunction- 一个用来确定数组元素排序顺序的比较函数。 此参数是可选的。 比较函数应该用两个参数进行比较。 给定元

素 A和 B,compareFunction的结果可以具有负值、0 或正值:

○ 若返回值为负,则表示 A 在排序后的序列中出现在 B 之前。

○ 若返回值为 0,则表示 A 和 B 具有相同的排序顺序。

○ 若返回值为正,则表示 A 在排序后的序列中出现在 B 之后。

*sortOptions- 一个或多个数字或定义的常量,相互之间由|(按位 OR)运算符隔开,它们将排序的行为从默认行为更改为其它行

为。 此参数是可选的。 下面是sortOptions可接受的值:

○ 1 或Array.CASEINSENSITIVE

○ 2 或Array.DESCENDING

○ 4 或Array.UNIQUESORT

○ 8 或Array.RETURNINDEXEDARRAY

○ 16 或Array.NUMERIC

 

返回

Array— 返回值取决于您是否传递任何参数,如以下列表中所述:

• 如果为...args参数的sortOptions变量指定值 4 或Array.UNIQUESORT,并且所排序的两个或更多个元素具有相同的排序字

段,则Flash 返回值 0 并且不修改数组。

• 如果为...args参数的sortOptions变量指定值 8 或Array.RETURNINDEXEDARRAY,则 Flash 返回排序后的索引数值数组

以反映排序结果,并且不修改数组。

• 否则,Flash 不返回任何内容并修改该数组以反映排序顺序。

 

下例是将sort()方法与自定义排序函数 (sortOnPrice) 一起使用,该函数按 price 排序,而不是按字母顺序排序。 请注意,新函数

getPrice()将提取 price。

 

以下Main.as可作为文档类测

 1 package 

 2 {

 3     import flash.display.Sprite;

 4 

 5     /**

 6       * ...

 7       * @author FrostYen

 8       */

 9     public class Main extends Sprite

10     {

11         var vegetables:Array = new Array  ;

12         public function Main()

13         {

14             vegetables.push(new Vegetable("lettuce",1.49));

15             vegetables.push(new Vegetable("spinach",1.89));

16             vegetables.push(new Vegetable("asparagus",3.99));

17             vegetables.push(new Vegetable("celery",1.29));

18             vegetables.push(new Vegetable("squash",1.44));

19             trace(vegetables);

20             // lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44

21             vegetables.sort(sortOnPrice);

22             trace(vegetables);

23             // celery:1.29, squash:1.44, lettuce:1.49, spinach:1.89, asparagus:3.99

24         }

25 

26         private function sortOnPrice(a:Vegetable,b:Vegetable):Number

27         {

28             var aPrice:Number = a.getPrice();

29             var bPrice:Number = b.getPrice();

30 

31             if ((aPrice > bPrice))

32             {

33                 return 1;

34             }

35             else if ((aPrice < bPrice))

36             {

37                 return -1;

38             }

39             else

40             {

41                 //aPrice == bPrice

42                 return 0;

43             }

44         }

45     }

46 

47 }

48 class Vegetable;

49 {

50     private var name:String;

51     private var price:Number;

52 

53     public function Vegetable(name:String,price:Number)

54     {

55         this.name = name;

56         this.price = price;

57     }

58 

59     public function getPrice():Number

60     {

61         return price;

62     }

63 

64     public function toString():String

65     {

66         return " " + name + ":" + price;

67     }

68 }

 

你可能感兴趣的:(actionscript)