NSString의 NSArray에서 대/소문자를 구분하지 않는 조회를 수행하는 쉬운 방법이 있습니까? NSArray에 대한 참조는 inspectitively 대소 문자 구분을 언급하지만 조회에 대해서는 언급하지 않습니다.대/소문자를 구분하지 않는 NSArray의 indexOfObject
내 자신의 fn을 쉽게 작성할 수 있지만 더 쉬운 방법이 있는지 알고 싶습니다.
NSString의 NSArray에서 대/소문자를 구분하지 않는 조회를 수행하는 쉬운 방법이 있습니까? NSArray에 대한 참조는 inspectitively 대소 문자 구분을 언급하지만 조회에 대해서는 언급하지 않습니다.대/소문자를 구분하지 않는 NSArray의 indexOfObject
내 자신의 fn을 쉽게 작성할 수 있지만 더 쉬운 방법이 있는지 알고 싶습니다.
이 작업을 수행하는 기본 제공 방법을 모른다. 물론
@interface NSArray (CaseInsensitiveIndexing)
- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString;
@end
@implementation NSArray (CaseInsensitiveIndexing)
- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString {
NSUInteger index = 0;
for (NSString *object in self) {
if ([object caseInsensitiveCompare:aString] == NSOrderedSame) {
return index;
}
index++;
}
return NSNotFound;
}
@end
, 당신은 아마 배열의 항목이 실제로 이 NSStrings 전에 있는지 확인하기 위해 검사 유형의 비트를하고 싶은 것 그러나,이가하는있는 NSArray의 카테고리를 작성하는 사소한 것 -caseInsensitiveCompare:
라고 부르지 만 아이디어를 얻을 수 있습니다.
질문자,
는이 작업을 수행 할 수있는 NSArray의 카테고리를 작성하는 좋은 생각이다
. 내 앱에서 많이 도움이되었습니다. 그러나 배열을 반복하는 대신에 을 사용하는 것이 훨씬 쉬운 방법이 있습니다.@interface NSArray (CaseInsensitiveIndexing)
- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString;
@end
@implementation NSArray (CaseInsensitiveIndexing)
- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString
{
return [self indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop)
{
return [[obj lowercaseString] isEqualToString:[aString lowercaseString]];
}];
}
@end
참고 : indexOfObjectPassingTest 내가 그것을 시도하지 않은하지만 당신은 자 NSPredicate와 배열을 필터링하여이 작업을 수행 할 수 있어야에만
IOS 4.0와 함께 작동합니다. 필요
없음 사용자 정의 카테고리가 없습니다 :
[myArray indexOfObjectPassingTest:^(NSString *obj, NSUInteger idx, BOOL *stop){
return (BOOL)([obj caseInsensitiveCompare:term] == NSOrderedSame);
}]
감사 매트. 그것은 내가 한 일이지만 로컬 기능에서만 가능합니다. 나는 ObjC에 매우 익숙하다. 그래서 나의 무지를 용서할 수있다. 그러나 당신이 배열을 반복하는 방법에 어떤 이점이 있는가? (NSUInteger i = 0; i
아니요, 두 방법 모두 정상입니다. 특정 컴파일러 (또는 특정 컴파일러의 특정 모드)가 for 루프 내에서 변수 선언을 허용하지 않기 때문에 필자는 이런 식으로 작업하는 경향이 있습니다. 사람들이 컴파일러에 전달하는 플래그를 결코 확신 할 수 없으므로 여기에 게시 한 모든 코드를 모든 사람이 컴파일해야합니다. –