2013-08-05 2 views
2

У меня есть этот вектор объектов, и каждый объект имеет некоторые свойства (дата, имя, идентификатор и т. Д.).Сортировка вектора объектов в ActionScript3

Я хочу отсортировать вектор по дате, допустим, к дате. Как мне это сделать? Я видел, что Array будет поддерживать функцию sortOn(), но Vectors этого не имеет.

объекта:

public final class DisciplineEvent { 
    public var id:Number; 
    public var name:String; 
    public var date:Date;} 

Thanx для ответа.

+3

ИМХО в случае объектов, вы бы лучше пойти с массивом, поскольку объект представляет собой динамический тип, поэтому изначально используя 'sortOn()' будет лучше, чем любой костыль с векторами. В любом случае любой объект может быть выведен для типа Object, поэтому создается «Вектор». 'довольно бессмысленно. – Vesper

+1

Согласитесь с @Vesper здесь. Array 'sortOn' * путь * быстрее, чем любая функция сортировки, которую вы можете использовать с Vector, и вы не получаете ничего от использования Vector, если в любом случае он не сохраняет примитивы. – Marty

+0

Thanx для ваших ответов. Я использовал солотон Марти Уоллеса, наименее сложный для меня. –

ответ

4

Ваш лучший выбор для скорости, доступ к Array's sortOn() и наличие вектора в качестве результата будет состоять в том, чтобы просто скопировать содержимое Vector в массив , используйте 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); 
} 
4

Допустим, у вас есть этот вектор:

var objects:Vector<ObjectType> = new Vector<ObjectType>(); 
objects.push(obj1, obj2); 

Вы бы сортировать его:

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); 

более подробную информацию можно найти здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Vector.html#sort()

+0

Да, или даже лучше, объявите функцию класса (частную), чтобы напрямую перейти к Vector. – Vesper