我需要实现一个方法,它将两个字符串比较为相等,将一些土耳其字母视为拉丁语(例如ı= i)。这是程序中的瓶颈,因此需要尽可能高效地实施。
我无法使用NSString比较:withOption:nsdiactricinsensitivesearch,因为它无法正确使用土耳其字母。
这是我的算法的实现:
- (NSComparisonResult) compareTurkishSymbol:(unichar)ch with:(unichar)another
{
//needs to be implemented
//code like: if (ch == 'ı') doesn't work correctly
}
- (NSComparisonResult)compareTurkish:(NSString*)word with:(NSString*)another
{
NSUInteger i;
for (i =0; i < word.length; ++i) {
NSComparisonResult result =[self compareTurkishSymbol:[word characterAtIndex:i] with:[another characterAtIndex:i]];
if (result != NSOrderedSame) {
return result;
}
}
return another.length > word.length ? NSOrderedDescending : NSOrderedSame;
}
问题是我无法正确比较unichars。它没有正确比较非ascii符号。如何处理?
答案 0 :(得分:3)
最后我找到了答案。
unichar是无符号短,这意味着每个符号都有其代码。因此,我们可以将它们作为字符进行比较,而不是数字。
- (NSComparisonResult) compareTurkishSymbol:(unichar)ch with:(unichar)another
{
if (ch == 305) {//code of 'ı'
ch = 'i';
}
return ch - another;
}