Flash / Flex / ActionScript/Array/Sort
Содержание
- 1 A case-insensitive sort using the Array.CASEINSENSITIVE constant
- 2 Call the sort( ) method passing the bandNameSort compare function:
- 3 Combine the combine the constants using the bitwise OR operator (|)
- 4 Get the sorted order of an array"s elements without changing the original array: Array.RETURNINDEXEDARRAY
- 5 Getting Sorted Indices
- 6 Getting the Minimum or Maximum Element
- 7 Randomizing the Elements of an Array
- 8 Reverse the order of the elements in an array
- 9 Sort an array in descending order using the Array.DESCENDING constant:
- 10 Sorting and Testing for Unique Values
- 11 Sorting Arrays
- 12 Sorting in Descending Order
- 13 Sorting Numerically: Array.NUMERIC
- 14 Sorting Regardless of Case
- 15 Sorting with Custom Algorithms
- 16 Sorting with Multiple Flags
- 17 sort( ) method runs a case-sensitive sort by default
- 18 Sort the array only if it contains unique elements: Array.UNIQUESORT
- 19 Sort the array"s values first according to the type of value and then alphabetically
- 20 Use the Array.CASEINSENSITIVE constant to run a case-insensitive sort:
- 21 Use the Array.NUMERIC constant with the sort( ) method to sort an array of numbers numerically
- 22 When you sort an array of numbers, the values are sorted according to the ASCII equivalents of the digits
A case-insensitive sort using the Array.CASEINSENSITIVE constant
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aWords:Array = ["o", "S", "a", "C"]; aWords.sort(Array.CASEINSENSITIVE); trace(aWords.toString()); //a,C,o,S } }
}
</source>
Call the sort( ) method passing the bandNameSort compare function:
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var bands:Array = ["C","W","L","T","A","r"]; bands.sort(bandNameSort); for(var i:int = 0; i < bands.length; i++) { trace(bands[i]); } function bandNameSort(band1:String, band2:String):int{ band1 = band1.toLowerCase( ); band2 = band2.toLowerCase( ); if(band1.substr(0, 4) == "the ") { band1 = band1.substr(4); } if(band2.substr(0, 4) == "the ") { band2 = band2.substr(4); } if(band1 < band2) { return -1; } else { return 1; } } } }
}
</source>
Combine the combine the constants using the bitwise OR operator (|)
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["T", "r", "a", "j"]; words.sort(Array.CASEINSENSITIVE | Array.DESCENDING); trace(words); } }
} T,r,j,a
</source>
Get the sorted order of an array"s elements without changing the original array: Array.RETURNINDEXEDARRAY
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["t", "r", "a", "j"]; var indices:Array = words.sort(Array.RETURNINDEXEDARRAY); trace(words); trace(indices); for(var i:int = 0; i < words.length; i++) { trace(words[indices[i]]); } } }
} t,r,a,j 2,3,1,0 a j r t
</source>
Getting Sorted Indices
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aEmployees:Array = ["A", "P", "C", "H"]; var aSortedIndices:Array = aEmployees.sort(Array.RETURNINDEXEDARRAY); trace(aEmployees.toString()); trace(aSortedIndices.toString()); for(var i:Number = 0; i < aSortedIndices.length; i++) { trace(aEmployees[aSortedIndices[i]]); } } }
} /* A,P,C,H 0,2,3,1 A C H P
- /
</source>
Getting the Minimum or Maximum Element
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var scores:Array = [10, 4, 15, 8]; scores.sort(Array.NUMERIC); trace("Minimum: " + scores[0]); trace("Maximum: " + scores[scores.length - 1]); } }
}
</source>
Randomizing the Elements of an Array
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ function randomSort(elementA:Object, elementB:Object):Number { return Math.random( ) - .5 } var numbers:Array = new Array( ); for(var i:int=0;i<20;i++) { numbers[i] = i; } numbers.sort(randomSort); for(var i:int=0;i<numbers.length;i++) { trace(numbers[i]); } } }
}
</source>
Reverse the order of the elements in an array
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["t", "r", "a", "j"]; words.reverse( ); trace(words); //j,a,r,t } }
}
</source>
Sort an array in descending order using the Array.DESCENDING constant:
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["t", "r", "a", "j"]; words.sort(Array.DESCENDING); trace(words); //t,r,j,a } }
}
</source>
Sorting and Testing for Unique Values
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aEmployees:Array = ["A", "P", "C", "H"]; if(aEmployees.sort(Array.UNIQUESORT) != 0) { trace(aEmployees.toString()); } else { trace("Array has duplicate elements, and has not been sorted. "); trace(aEmployees.toString()); } } }
} // A,C,H,P
</source>
Sorting Arrays
<source lang="java">
//sort() sorts regular, single dimension arrays. //sortOn() sorts arrays of associative arrays based on one of the keys of the associative arrays. //reverse() reverses the order of the elements.
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aEmployees:Array = ["A", "P", "C", "H"]; aEmployees.sort(); trace(aEmployees.toString()); } }
} A,C,H,P
</source>
Sorting in Descending Order
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aEmployees:Array = ["A", "P", "C", "H"]; aEmployees.sort(Array.DESCENDING); trace(aEmployees.toString()); //P,H,C,A } }
}
</source>
Sorting Numerically: Array.NUMERIC
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){
var aNumbers:Array = [10, 1, 2, 15, 21, 13, 33, 3]; aNumbers.sort(); trace(aNumbers.toString()); var aNumbers:Array = [10, 1, 2, 15, 21, 13, 33, 3]; aNumbers.sort(Array.NUMERIC); trace(aNumbers.toString()); } }
} 1,10,13,15,2,21,3,33 1,2,3,10,13,15,21,33
</source>
Sorting Regardless of Case
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){
var aWords:Array = ["o", "S", "a", "C"]; aWords.sort(); trace(aWords.toString()); //C,S,a,o } }
}
</source>
Sorting with Custom Algorithms
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aWords:Array = ["o", "S", "a", "C"]; aWords.sort(sorter); trace(aWords.toString()); } function sorter(a:String, b:String):Number { if(a.toUpperCase() > b.toUpperCase()) { return -1; } else if(a.toUpperCase() < b.toUpperCase()) { return 1; } else { return 0; } } }
} S,o,C,a
</source>
Sorting with Multiple Flags
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aWords:Array = ["o", "S", "a", "C"]; aWords.sort(Array.DESCENDING | Array.CASEINSENSITIVE); trace(aWords.toString()); // S,o,C,a } }
}
</source>
sort( ) method runs a case-sensitive sort by default
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["T", "r", "a", "j"]; words.sort( ); trace(words); //T,a,j,r } }
}
</source>
Sort the array only if it contains unique elements: Array.UNIQUESORT
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var ranking:Array = [2,5,6,3,1,1,4,8,7,10,9]; var sortedRanking:Object = ranking.sort(Array.UNIQUESORT); trace(sortedRanking); trace(ranking); } }
} 0 2,5,6,3,1,1,4,8,7,10,9
</source>
Sort the array"s values first according to the type of value and then alphabetically
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var aPlaces:Array = ["B", "V", "J", "C","M", "P"]; aPlaces.sort(sorter); trace(aPlaces.toString()); } function isInArray(sElement:String, aArray:Array) { for(var i:Number = 0; i < aArray.length; i++) { if(sElement == aArray[i]) { return true; } } return false; } function sorter(a:String, b:String):Number { var aCountries:Array = ["M", "V", "J"]; var aCities:Array = ["C", "P", "B"]; if((isInArray(a, aCountries) && isInArray(b, aCities)) || (isInArray(b, aCountries) && isInArray(a, aCities))) { return 1; } if(a.toUpperCase() > b.toUpperCase()) { return 1; } else if(a.toUpperCase() < b.toUpperCase()) { return -1; } else { return 0; } } }
} B,C,J,M,P,V
</source>
Use the Array.CASEINSENSITIVE constant to run a case-insensitive sort:
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var words:Array = ["T", "r", "a", "j"]; words.sort(Array.CASEINSENSITIVE); trace(words); //a,j,r,T } }
}
</source>
Use the Array.NUMERIC constant with the sort( ) method to sort an array of numbers numerically
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var scores:Array = [10, 2, 14, 5, 8, 20, 19, 6]; scores.sort(Array.NUMERIC); trace(scores); //2,5,6,8,10,14,19,20 } }
}
</source>
When you sort an array of numbers, the values are sorted according to the ASCII equivalents of the digits
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var scores:Array = [10, 2, 14, 5, 8, 20, 19, 6]; scores.sort( ); trace(scores); //10,14,19,2,20,5,6,8 } }
}
</source>