我有两个NSArrays,每个包含NSStrings.
如何检查它们是否等效,忽略大小写和顺序?
我一直在玩NSSets和NSPredicates,但没有太多运气.
简单(不区分大小写)
NSSet* one = [[NSCountedSet setWithArray:firstArray] valueForKey:@"lowercaseString"];
NSSet* two = [[NSCountedSet setWithArray:secondArray] valueForKey:@"lowercaseString"];
return [one isEqualToSet:two];
Run Code Online (Sandbox Code Playgroud)
复杂(案例和变音符号不敏感)
此解决方案更复杂,因为它需要特殊的字符串比较.您可以通过使用此方法迭代排序的数组来实现此目的,或者,如果您希望使用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];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |