1

私には次のタスクがあります。

カテゴリ内のすべてのアイテムは、例を除いてアルファベット順に並べ替える必要があります。文字の前に特殊文字と数字を表示する必要があります。

私は問題に直面しています。標準のソート関数とプラグインのほとんどは、ASCIIテーブルで使用されています。この表では、次の記号:〜、}、{などのインデックスは文字よりも大きくなっています。例:並べ替えの実際の結果は次のとおりです。

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

私は取得する必要があります:

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

アドバイスや例をできるだけ早く教えてください。

よろしくお願いします。

4

2 に答える 2

0

「時間の短い」解決策:データを3つの配列またはリストにカットします:特殊文字、数字、文字。(数値であるか、'a' と 'Z' の間であるかをテストします)。Java で fe Collections.sort または Arrays.sort を使用して並べ替えます。これにより、各コレクションまたは配列が並べ替えられ、それらが一緒に追加されますが、並べ替えは行われなくなります。私はこれをテストしていませんが、うまくいくようです

于 2010-05-14T12:40:47.633 に答える
0

これは少し面倒で、主に '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
*/
于 2010-05-14T13:46:21.937 に答える