[英]JAVA or JAVA SCRIPT OR Idoc SCRIPT alphabetical sort
我有以下任務:
除示例外,類別中的所有項目均應按字母順序排序。 特殊字符和數字應在字母前顯示。
我正面臨一個問題。 ASCII表使用了大多數標准排序功能和插件。 在此表中,以下符號:〜,},{等具有大於字母的索引,例如:排序的實際結果是:
1 - #1 A T
2 - A T
3 - {C T
我需要得到:
1 - #1 A T
2 - {C T
3 - A T
請盡快給我您的建議或任何示例。
最好的祝福。
“短時間”解決方案:將數據切成3個數組或列表:特殊字符,數字,字符。 (測試是數字還是在'a'和'Z'之間)。 使用Java中的fe Collections.sort或Arrays.sort對它們進行排序,這將對每個集合或數組進行排序,然后將它們附加在一起,但不再進行任何排序。 我還沒有測試過,但看起來可能有用
這有點乏味,主要是為了防止'100'在'2'之前排序。
您可以將字符串分成單個字符和數字組。
在對任何az字符添加一些“權重”之后,對任何數字組(如數字)進行排序,並按字符代碼對其他所有內容進行排序。
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
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.