2010-05-14 5 views
1

다음 작업이 있습니다.JAVA 또는 JAVA 스크립트 또는 Idoc 스크립트 알파벳순

예제 내의 경우를 제외하고 범주 내의 모든 항목은 알파벳순으로 정렬해야합니다. 특수 문자와 숫자는 문자 앞에 표시되어야합니다.

저는 문제가 있습니다. 대부분의 표준 정렬 함수와 플러그인은 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 개 배열 또는 목록의 데이터 잘라 내기 : 특수 문자, 숫자, 문자. (숫자가 '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 
*/