문자열 정렬 및 비교
Flash Player 10.1 이상, Adobe AIR 2.0 이상
정렬은 적절한 순서로 항목을 배열하는 프로세스입니다. 정렬 규칙은 로캘에 따라 크게 달라집니다. 목록을 정렬하거나 텍스트 검색 알고리즘에서와 같이 유사한 항목을 일치시키는 경우에도 규칙이 달라집니다.
정렬 시에는 대/소문자, 분음 기호(예: 액센트) 등의 사소한 차이도 중요한 경우가 많습니다. 예를 들어 프랑스어나 영어에서는 ö(분음이 포함된 o)가 대부분 일반 글자 o에 해당하지만 스웨덴어에서는 그 뒤에 z 문자가 옵니다. 또한 프랑스어를 비롯한 일부 언어에서는 단어의 마지막 액센트 차이에 따라 정렬 목록에서의 순서가 결정됩니다.
검색 시에는 일치하는 값을 찾을 확률을 높이기 위해 대/소문자 또는 분음 기호 차이는 무시하는 경우가 많습니다. 예를 들어 프랑스어 문서에서 "cote"라는 문자를 검색하면 검색 결과에 "cote", "côte", "coté"가 포함됩니다.
Collator 클래스 사용
Collator 클래스의 기본 메서드는 주로 정렬에 사용되는 compare() 메서드와 값 일치에 사용되는 equals() 메서드입니다.
다음 예제에서는 compare() 메서드와 equals() 메서드의 서로 다른 비헤이비어를 보여 줍니다.
var words:Array = new Array("coté", "côte");
var sorter:Collator = new Collator("fr-FR", CollatorMode.SORTING);
words.sort(sorter.compare);
trace(words); // côte,coté
var matcher:Collator = new Collator("fr-FR", CollatorMode.MATCHING);
if (matcher.equals(words[0], words[1]))
{
trace(words[0] + " = " + words[1]); // côte = coté
}
이 예제에서는 프랑스어-프랑스 로캘에 대해 먼저 SORTING 모드로 Collator 객체를 생성합니다. 그런 다음 분음 기호만 다른 두 단어를 정렬합니다. 이를 통해 SORTING 비교가 액센트 있는 문자와 없는 문자를 구별한다는 점을 알 수 있습니다.
정렬은 Collator 객체의 sort() 메서드에 대한 참조를 Array.sort() 메서드에 대한 매개 변수로 전달하여 수행됩니다. 이는 Collator 객체를 사용하여 정렬 순서를 제어하는 가장 효율적인 방식 중 하나입니다.
그 후에 이 예제에서는 MATCHING 모드로 Collator 객체를 만듭니다. 이때 Collator 객체는 두 단어를 비교하여 동일한 것으로 간주합니다. 이를 통해 MATCHING 비교는 액센트 있는 문자와 없는 문자를 동일한 값으로 간주한다는 점을 알 수 있습니다.
Collator 클래스의 비헤이비어 사용자 지정
기본적으로 Collator 클래스는 해당 로캘 및 사용자의 시스템 기본 설정에 따라 운영 체제에서 가져온 문자열 비교 규칙을 사용합니다. 다양한 속성을 명시적으로 설정하여 compare() 및 equals() 메서드의 비헤이비어를 사용자 지정할 수 있습니다. 다음 표에서는 다양한 Collator 속성과 해당 속성이 비교에 미치는 효과를 보여 줍니다.
Collator 속성
|
효과
|
numericComparison
|
숫자 문자를 숫자로 취급할지 텍스트로 취급할지 제어합니다.
|
ignoreCase
|
대문자와 소문자의 차이를 무시할지 여부를 제어합니다.
|
ignoreCharacterWidth
|
일부 중국어 및 일본어 문자의 전자와 반자 형태를 동일한 것으로 평가할지 여부를 제어합니다.
|
ignoreDiacritics
|
같은 기본 문자를 사용하지만 액센트 및 기타 분음 기호가 다른 문자열을 동일한 것으로 평가할지 여부를 제어합니다.
|
ignoreKanaType
|
사용 중인 가나 문자 형식만 다른 문자열을 동일한 것으로 취급할지 여부를 제어합니다.
|
ignoreSymbols
|
공백, 통화 기호, 수학 기호 및 기타 기호 유형과 같은 기호 문자를 무시할지 여부를 제어합니다.
|
다음 코드에서는 ignoreDiacritics 속성을 true로 설정하면 프랑스어 단어 목록의 정렬 순서가 바뀌는 것을 보여 줍니다.
var words:Array = new Array("COTE", "coté", "côte", "Coté","cote");
var sorter:Collator = new Collator("fr-CA", CollatorMode.SORTING);
words.sort(sorter.compare);
trace(words); // cote,COTE,côte,coté,Coté
sorter.ignoreDiacritics = true;
words.sort(sorter.compare);
trace(words); // côte,coté,cote,Coté,COTE