文字列の並べ替えと比較

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 オブジェクトを最初に作成します。次に、分音記号のみが異なる 2 つの単語を並べ替えます。この例では、SORTING 比較において、アクセント記号のある文字とない文字が区別されます。

並べ替えは、Collator オブジェクトの sort() メソッドに、Array.sort() メソッドのパラメーターとして参照を渡すことで実行されます。これは、Collator オブジェクトを使用して並べ替え順序を制御するための最も効率的な方法の 1 つです。

この例では、次に MATCHING モードで Collator オブジェクトを作成します。その Collator オブジェクトが 2 つの単語を比較するときに、それらを同じものとして処理します。これは、MATCHING 比較では、アクセント記号のある文字とない文字が同じように扱われることを示します。

Collator クラスのビヘイビアーのカスタマイズ

デフォルトでは、Collator クラスは、ロケールとユーザーのシステム環境設定に基づいてオペレーティングシステムから取得した文字列比較ルールを使用します。様々なプロパティを明示的に設定することで、compare() メソッドおよび equals() メソッドのビヘイビアーをカスタマイズできます。次の表は、プロパティと、比較におけるその影響を示しています。

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