在ActionScript3中对对象向量进行排序

Mar*_*sik 2 sorting vector object actionscript-3

我有这个对象向量,每个对象都有一些性质(日期,名称,ID等)。

我想按日期对向量进行排序。我该怎么做呢?我已经看到,数组将支持sortOn()函数,但Vector没有它。

宾语:

public final class DisciplineEvent {
    public var id:Number;
    public var name:String;
    public var date:Date;}
Run Code Online (Sandbox Code Playgroud)

感谢您的回答。

小智 5

假设您有这个向量:

var objects:Vector<ObjectType> = new Vector<ObjectType>();
objects.push(obj1, obj2);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方式对其进行排序:

var sortingFunction:Function = function(itemA:ObjectType, itemB:ObjectType):Number {
    if (itemA.date.valueOf() < itemB.date.valueOf()) return -1; //ITEM A is before ITEM B
    else if (itemA.date.valueOf() > itemB.date.valueOf()) return 1; //ITEM A is after ITEM B
    else return 0; //ITEM A and ITEM B have same date
}

objects.sort(sortingFunction);
Run Code Online (Sandbox Code Playgroud)

可以在这里找到更多信息:http : //help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/Vector.html#sort()


Mar*_*rty 5

关于速度,访问Array sortOn()并获得Vector的最佳选择是将Vector的内容复制到Array,使用sortOn(),然后再复制回来。例:

var vec:Vector.<Object> = new <Object>[
    { a: 2 }, { a: 1 }, { a: 12 }, { a: 7 }
];

var array:Array = [];
while(vec.length > 0) array.push(vec.pop());

array.sortOn("a", Array.NUMERIC|Array.DESCENDING);
while(array.length > 0) vec.push(array.pop());

for each(var i:Object in vec)
{
    trace(i.a);
}
Run Code Online (Sandbox Code Playgroud)