Простой (чувствительно к регистру)
NSSet* one = [[NSCountedSet setWithArray:firstArray] valueForKey:@"lowercaseString"];
NSSet* two = [[NSCountedSet setWithArray:secondArray] valueForKey:@"lowercaseString"];
return [one isEqualToSet:two];
комплекс (корпус и диакритических нечувствительны)
Это решение является более сложным, так как он требует особого сравнения строк. Вы можете либо выполнить это путем итерации отсортированных массивов с использованием метода this, либо, если вы хотите использовать valueForKey:
, используя следующий код.
@interface LNComparisonHelper : NSObject
- (instancetype)initWithString:(NSString*)str;
@property (nonatomic, copy, readonly) string;
@end
@implementation LNComparisonHelper
- (instancetype)initWithString:(NSString*)str
{
self = [super init];
if(self) { _str = [str copy]; }
return self;
}
- (BOOL)isEqual:(LNComparisonHelper*)other
{
return [_str compare:other.string options:(DiacriticInsensitiveSearch | CaseInsensitiveSearch)] == OrderedSame;
}
@end
@interface NSString (ComparisonWrapper)
- (id) ln_casediacriticInsensitiveComparator;
@end
@implementation NSString (ComparisonWrapper)
- (id) ln_casediacriticInsensitiveComparator
{
return [[LNComparisonHelper alloc] initWithString:self];
}
@end
NSSet* one = [[NSCountedSet setWithArray:firstArray] valueForKey:@"ln_casediacriticInsensitiveComparator"];
NSSet* two = [[NSCountedSet setWithArray:secondArray] valueForKey:@"ln_casediacriticInsensitiveComparator"];
return [one isEqualToSet:two];
Ницца! Есть ли проблемы с« lowercaseString »на неанглийских персонажах? –
Хорошее сообщение в блоге на KVC и такие обычаи: [Fun with KVC] (http://www.noodlesoft.com/blog/2009/06/30/fun-with-kvc/) – zaph
Например: http://www.i18nguy.com/unicode/turkish-i18n.html –