2010-05-14 32 views
1

J'ai la tâche suivante:JAVA ou JAVA SCRIPT OU IDoc SCRIPT alphabétique Trier

Tous les articles dans les catégories doivent être classés par ordre alphabétique, sauf pour les exemples. Les caractères spéciaux et les chiffres doivent être affichés avant les lettres.

Je suis confronté à un problème. La plupart des fonctions de tri standard et des plugins sont utilisés dans la table ASCII. Dans ce tableau, les symboles suivants: ~,}, {etc, ont l'index plus de lettres, par exemple: Résultat réel du tri est:

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

Je dois obtenir:

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

S'il vous plaît donnez-moi votre conseil ou des exemples dès que possible.

Cordialement.

+0

Vous dites "Tous les éléments dans les catégories doivent être triés par ordre alphabétique à l'exception de" mais ne finissez pas la phrase. Nous ne pouvons pas vous aider si nous ne savons pas quelle (s) est (sont) la (les) exception (s). Pourriez-vous élaborer? – Pops

+0

Désolé pour malentendu. Exemples - c'est une catégorie d'articles. Donc, cela ne change pas le sens principal de la tâche. "Tous les éléments dans les catégories doivent être triés par ordre alphabétique" – user341203

Répondre

0

Solution "à court de temps": découpez les données en 3 tableaux ou listes: caractères spéciaux, nombres, caractères. (test si le nombre est compris entre 'a' et 'Z'). Triez-les avec f.e. Collections.sort ou Arrays.sort en Java qui triera chaque collection ou tableau et les ajoutera ensemble mais ne fera plus aucun tri. Je n'ai pas testé cela, mais il semble que cela pourrait fonctionner

0

Ceci est un peu fastidieux, surtout pour empêcher '100' de trier avant '2'.

Vous pouvez diviser les chaînes en caractères individuels et en groupes de chiffres.

Trier les groupes de chiffres comme des nombres, et trier tout le reste par le code de caractère, après avoir ajouté un certain poids à tout caractère 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 
*/