iOS UITableView オブジェクトを並べ替えようとしています。現在、次のコードを使用しています。
// Sort terms alphabetically, ignoring case
[self.termsList sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
これにより、大文字と小文字を区別せずにリストが並べ替えられます。ただし、句読点も無視するとよいでしょう。例えば:
c.a.t.
car
cat
次のようにソートする必要があります。
car
c.a.t.
cat
(実際には、2 匹の猫 (猫または猫) のどちらが最初に来るかは問題ではありません。
これを回避する簡単な方法はありますか?解決策には、文字列から英数字のみを抽出し、それらを比較してから、英数字以外の文字を再度含めて元の状態に戻すことが含まれると思います。
実際のところ、私が本当に気にかけている文字はピリオド (.) だけですが、すべての句読点を簡単にカバーする解決策があれば、知っておくと役に立ちます。
注: 1か月前に Java についてまったく同じ質問をしました。現在、Objective-C で同じソリューションを作成しています。これを簡単にするiOS APIで利用できるトリックがあるのだろうか...
編集:次のコードを使用して句読点を削除し、並べ替えた別の配列に入力しようとしました(@tigueroが提案)。ただし、最後のステップを実行する方法がわかりません。最初の配列を2番目の順序に従って実際にソートすることです。これが私のコードです:
NSMutableArray *arrayWithoutPunctuation = [[NSMutableArray alloc] init];
for (NSString *item in arrayWithPunctuation)
{
// Replace hyphens/periods with spaces
item = [item stringByReplacingOccurrencesOfString:@"-" withString:@" "]; // ...hyphens
item = [item stringByReplacingOccurrencesOfString:@"." withString:@" "]; // ...periods
[arrayWithoutPunctuation addObject:item];
}
[arrayWithoutPunctuation sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
これはソートされた「arrayWithoutPunctuation」を提供しますが、もちろん句読点は含まれていません。これはうまくソートされていませんが、そもそも配列にとって重要な句読点が含まれていないため、これは良くありません。私がする必要があるのは、「arrayWithoutPunctuation」の順序に従って「arrayWithPunctuation」をソートすることです...助けていただければ幸いです。