2010-05-14 25 views
1

我有以下任務:JAVA或JAVA SCRIPT或Idoc SCRIPT字母排序

類別內的所有項目都應按字母順序排序,但示例除外。字母之前應顯示特殊字符和數字。

我正面臨一個問題。大多數標準的排序函數和插件正在使用ASCII表格。在該表中以下符號:〜,},{等有指數比字母多,例如: 排序的實際結果是:

1 - #1 A T 
2 - A T 
3 - {C T 

我需要得到:

1 - #1 A T 
2 - {C T 
3 - A T 

請儘快給我你的建議或任何例子。

最好的問候。

+0

你說「類別內的所有項目都應該按照字母順序排序,但是不要完成句子。除非我們知道例外是什麼,否則我們無法幫助您。你能詳細說明一下嗎? – Pops 2010-05-15 16:24:06

+0

抱歉誤會。示例 - 它是一類項目。所以它不會改變任務的主要意圖。 「類別內的所有項目都應按字母順序排序」 – user341203 2010-05-17 06:40:29

回答

0

「缺少時間」解決方案:剪切3個數組或列表中的數據:特殊字符,數字,字符。 (測試是數字還是介於'a'和'Z'之間)。用f.e.排序它們。 Java中的Collections.sort或Arrays.sort將對每個集合或數組進行排序,然後將它們附加在一起,但不再進行任何排序。我沒有測試過這個,但它看起來好像可能工作

0

這是一個有點乏味,主要是爲了保持'100'在'2'之前排序。

您可以將字符串拆分爲單個字符和數字組。

對任何數字組排序,如數字,並在向任何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 
*/