2009-11-13 3 views
0

Таким образом, у меня есть двумерный массив идентификаторов и подсчет голосов - voteArray [я] [0] = ID, voteArray [я] [1] = подсчет голосовСортировка двумерный массив в AS3

Я хочу наверх 3 проголосовали за элементы, которые будут отображаться в разных цветах, поэтому у меня есть второй массив - sortArray.

Затем, когда я diplay результаты, я планирую использовать данные из массива сортировки, чтобы узнать, какой цвет должны иметь данные voteArray. Данные от voteArray должны быть в правильном порядке по ID.

SO это то, что я делаю:

sortArray = voteArray; 
sortArray.sortOn("1",Array.NUMERIC); 

Это путает сортировку данных в voteArray. Что я делаю не так?

ответ

1
public function mySort(a:Array, b:Array):Number { 
    if(a[1] <= b[1]) { 
    return 1; 
    } 
    return -1; 
} 

sortArray.sort(mySort); 
+1

+1 для краткого правильного решения. не забывайте 'var sortArray: Array = voteArray.slice (0);' хотя. документация - http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html#sort%28%29 – greggreg

1

если вы скажете:

sortArray = voteArray; 

Вы только назначая обращение voteArray к sortArray. Итак, после этого утверждения обе ваши переменные указывают на одну и ту же часть памяти.

Я немного удивлен, класс Array, во флэш-памяти не имеет функцию клонирования или конструктор копирования

способы вы можете скопировать массив:

var sortArray:Array = voteArray.filter(function(){return true;}); 

var sortArray:Array = voteArray.slice(0); 
+0

спасибо! Теперь у меня только одна проблема ... sortArray.sortOn ("1", Array.DESCENDING | Array.NUMERICAL); возвращает это: 6,1 2,1 3,1 4,1 5,2 1,5 7,1 8,2 9,1 10,1 – Frode

+0

Я не конечно, но sortOn ожидает объект, а не индекс массива. поэтому, если вы изменили свою структуру данных на voteArray [i] = {«id»: 2, «voteCount»: 2} превратили его в объект, а затем вызвали voteArray.sortOn («voteCount», ...) он должен работать. – Les

Смежные вопросы