Sorting an array of numbers
The standard method of sorting in flash with myArray.sort
uses a string comparison. If you sort an array of numbers,
all numbers starting with 0 come first, then 1 and so on.
If you want numerical ordering, like 10 comes after 9 you
have to provide your own function to compare two values of
your array. Here is the example to sort numerical:
// Defining the function which does the comparison in the sort function
// The function takes two parameters a and b and returns -1 if a < b,
// 0 if a = b and 1 if a > b.
function compareNumbers( a, b){
return((a > b) - (a < b))
}
// make a new array for our test
myArray = new Array();
// fill the array with random numbers
for(i=0;i<20;i++){
myArray[i] = random(20);
}
// how does it look like unsorted ?
trace("unsorted: " add myArray);
// sort it with standard sort function
myArray.sort();
// how does it look now ?
trace("stringsorted: " add myArray);
// sort it with our numerical comparison
myArray.sort(compareNumbers);
// yes - thats what we were looking for :)
trace("numbersorted: " add myArray);
- Owen van Dijk Date: 19/11/2001
You could also use an simple Bubblesort:
function bubbleSort(inputArray, start, rest) {
for (var i = rest - 1; i >= start; i--) {
for (var j = start; j <= i; j++) {
if (inputArray[j+1] < inputArray[j]) {
var tempValue = inputArray[j];
inputArray[j] = inputArray[j+1];
inputArray[j+1] = tempValue;
}
}
}
- jupenz Date: 06/10/2003
ey... why is it that there is no result? where do i put that script? actually i am just new in here! can anyone tell me where to put the script? is it in the main time line? please help!
- maheshsangle Date: 15/12/2004
Hi,
Sorting an array of numbers works fine on its own. I m trying to capture 7 different into array. The same gets well into array; also works stupidly (string sort) till step 2 as it should.
But shows the same output even for the last step; which hopefully should be number sorted. Have u ever come across the same. Is there any email ID, where I can send the FLA just for ref.
Thankz & Regards,
Mahesh
- Flash Guy Date: 15/12/2004
Didn't work for me!
I modified the code to this;
function compareNumbers(a, b) {
return (Boolean((a-b)>0));
}
and it works fine!
- vikky Date: 28/11/2009
Hey good work nice code. Thanks!!
Add comment
Home