1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package { import flash.utils.ByteArray; public class SortByGB2312 { public function SortByGB2312() { throw new Error("There is an unexpected error!"); } public static function sort(arr:Array):Array { arr.sort(); var byte:ByteArray = new ByteArray(); var sortedArr:Array = []; var returnArr:Array = []; for (var m:int = 0; m < arr.length; m++ ) { var str:String = arr[m]; if (str.charCodeAt(0) < 123) { returnArr[returnArr.length] = str; arr[m] = null; continue; } byte.writeMultiByte(str.charAt(0), "gb2312"); } for (var n:int = 0; n < arr.length; n++ ) { if (String(arr[n]) == "null") { arr.splice(n, 1); n--; continue; } } byte.position = 0; var len:int = byte.length / 2; for (var i:int = 0; i < len; i++ ) { sortedArr[sortedArr.length] = { a:byte[i * 2], b:byte[i * 2 + 1], c:arr[i] }; } sortedArr.sortOn(["a", "b"], [Array.DESCENDING | Array.NUMERIC]); for each(var obj:Object in sortedArr) { returnArr[returnArr.length] = obj.c; } byte.clear(); return returnArr; } } } |
继上一个版本 此版本兼容支持 英文、数字开头的字符串进行排序。。
因此此版本已完整支持 中英文以及数字、符号开头的字符串进行排序。。。
待优化~~
使用:
SortByGB2312.sort(["在这里","z阿里巴巴","1淘宝网"]);
output:
1淘宝网,z阿里巴巴,在这里