2010-05-14 3 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

+0

Извините за непонимание. Примеры - это категория предметов. Таким образом, это не меняет основной задачи. «Все элементы в категориях должны сортироваться в алфавитном порядке» – user341203

ответ

0

Решение «короткого времени»: вырезать данные в 3 массивах или списках: специальные символы, цифры, символы. (test if is number или находится между «a» и «Z»). Сортируйте их с f.e. Collections.sort или Arrays.sort в Java, которые сортируют каждую коллекцию или массив, а затем присоединяют их вместе, но больше не сортируют. Я не тестировал это, но похоже, что это может сработать

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 
*/