3

これを使用すると、ソート順に違いはありますか(メモリ内ソートの場合)

[[UILocalizedIndexedCollation currentCollation] sortedArrayFromArray:namesArray collationStringSelector:@selector(sortName)]

そしてこれ(CoreDataソート用)

fetchRequest.sortDescriptors =
    [NSArray arrayWithObject:[NSSortDescriptor
                              sortDescriptorWithKey:@"name" ascending:YES
                              selector:@selector(localizedStandardCompare:)]];

巨大なデータ セットを CoreData で保存し、それを TableView に表示したいと考えています。この場合、いずれかのレコードが変更された場合、最初の方法を使用して配列全体を再ソートする必要がありますが、これには時間がかかるため、2 番目の方法の方がはるかに適しています。

英語の場合、並べ替え順序が同じであることは知っていますが、ウムラウト付きの文字を使用する言語とラテン文字以外の文字を使用する言語についてはよくわかりません。

どうぞよろしくお願いいたします。

4

1 に答える 1

2

1 つの違いはUILocalizedIndexedCollation、ロケールが en_US の場合、非ラテン文字が音声的にソートされるように見えることです。たとえば、英語の iPhone では、ス (「ス」と発音) は「S」の下にあり、「S」と実際に関係する他の単語と一緒に表示されます。のlocalizedStandardCompare:場合、Z の後に同じス文字が入ります。

分音符号のあるラテン文字は、両方の種類で同じように扱われるようです (たとえば、 と の両方で "Aaa" < "Åab" < "Aac" UILocalizedIndexedCollation) localizedStandardCompare:

特にデバイスを他のロケールに設定し始めると、おそらくもっと多くの違いがあります。残念ながら、 CoreData を同じ方法でソートする方法を理解していないUILocalizedIndexedCollationため、メモリ内配列を使用するかUILocalizedIndexedCollation、要件に応じて完全に回避することに頼っています。誰かがより良い方法を知っていれば、それは素晴らしいことです。

于 2013-04-25T04:57:17.560 に答える