簡體   English   中英

JAVA或JAVA SCRIPT或Idoc SCRIPT字母排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM