我有以下任务:
类别中的所有项目都应按字母顺序排序,但示例除外。字母前应显示特殊字符和数字。
我遇到了一个问题。大多数标准排序函数和插件都使用ASCII表。在此表中,以下符号:〜,},{等的索引多于字母,例如: 排序的实际结果是:
1 - #1 A T
2 - A T
3 - {C T
我需要得到:
1 - #1 A T
2 - {C T
3 - A T
请尽快给我你的建议或任何例子。
最诚挚的问候。
答案 0 :(得分:0)
“缺少时间”解决方案:在3个数组或列表中删除数据:特殊字符,数字,字符。 (测试是否为数字或在'a'和'Z'之间)。用f.e.对它们进行排序。 Java中的Collections.sort或Arrays.sort将对每个集合或数组进行排序,然后将它们附加在一起,但不再进行任何排序。我没有对此进行过测试,但看起来它可能会起作用
答案 1 :(得分:0)
这有点单调乏味,主要是为了在'2'之前保持'100'排序。
您可以将字符串拆分为单个字符和数字组。
对任何数字组进行排序,如数字,并按字符代码对其他所有数字进行排序, 在为任何a-z字符添加一些'权重'之后。
Array.prototype.a1Sort= function(){
var a1, b1, rx=/(\d+)|(\D)/g, rd=/\d+/;
return this.sort(function(a, b){
a= a.toLowerCase().match(rx);
b= b.toLowerCase().match(rx);
while(a.length && b.length){
a1= a.shift();
b1= b.shift();
if(rd.test(a1) || rd.test(b1)){
if(!rd.test(a1)) return 1;
if(!rd.test(b1)) return -1;
if(a1!= b1) return a1-b1;
}
else{
a1= a1.charCodeAt(0);
b1= b1.charCodeAt(0);
if(a1> 96 && a1<123) a1+= 1000;
if(b1> 96 && b1<123) b1+= 1000;
if(a1!= b1) return a1= b1;
}
}
return a.length-b.length;
});
}
var s1=['#1 A T','A T','{C T'];
alert(s1.customSort())
/* returned value: (Array)
#1 A T,{C T,A T
*/