2010-07-29 8 views
1

는 내가 15 문자열과 비교해야 내 경우에는 여러 string.For 전문자열을 여러 문자열과 비교하는 더 좋은 방법이 있습니까?

if([var isEqualToString:@"Box"]||[var isEqualToString:@"Ball"]|[varisEqualToString:@"Bat"]) 
{ 
some function 
}else{ 
some function 
} 

로 문자열을 비교하려면, 그래서 거기에 15 times.Is을 비교하는 다른 더 나은 방법을 확인해야 . 거기에 어떤 작은 간단한 코드 내 논리를 구현할 것입니다.

답변

0

당신은

NSArray *stringArray = [NSArray arrayWithObjects: @"Box", @"Ball", @"Bat", nil]; 
if([NSArray indexOfObject:var] != NSNotFound) 
{ 
    ... 
} 
else 
{ 
    ... 
} 
정말

하지 더 나은,하지만, 아마도 더 읽기를 사용하여 배열을 만들 수 있습니다.

2

NSDictionary로 문자열을 넣어 :

NSNull *nullValue = [NSNull null]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:nullValue, nullValue, ..., nil forKeys:@"Box", @"Ball", ..., nil]; 
if ([dictionary objectForKey:var]) { 
    // var matches one of the keys, run function 
} 
else { 
    // var doesn't match any of the keys, do something else 
} 

사전 조회가 배열 검색 O는 아마 반면 O (1), (로그 n)이다. 15 요소에 대해서는 큰 문제가 아니지만 일반적으로 사전 또는 세트가 더 잘 수행됩니다. 당신이이 검색/비교를 많이한다면 뭔가 생각할 것입니다.

편집

가 나는 NSSet는 O (1) 시간 조회를 할 것, 언급 한 바와 같이 : 확실히,

NSSet *comparisonSet = [NSSet setWithObjects:@"Box", @"Ball", ..., nil]; 
if ([comparisonSet containsObject:var]) { 
    // var matches set object, run function 
} 
else { 
    // var doesn't match any of the set objects, do something else 
} 

클리너 코드를,하지만 난 NSSet 인스턴스를 만드는 데 훨씬 더 오래 걸릴 생각 . 하지만 한 번만해야합니다. 맞죠?

+1

null 값을 갖는 사전을 사용하는 대신, 아마도 'NSSet'이 더 적합 할 것입니다. – Hugh

+0

또한'NSDictionary'와 함께'valueForKey :'대신'objectForKey :'를 사용해야합니다. NSSet의 경우,'containsObject :'를 사용하십시오. – jtbandes

+0

네 말이 맞아, 나는 기억에서 타이핑하고있어. –

7

다음과 같이이 NSSet에 문자열을 추가하는 것이 더 낫다 :

NSSet *mySet = [NSSet setWithObjects:@"Box", @"Ball", @"Bat", nil]; 
if([mySet containsObject:string]) { 
} else { 
} 

다른 솔루션의 많은 같은 목적을 위해 배열이나 사전을 사용합니다. 집합은 정렬되지 않은 개체를 포함하고 멤버 자격을 테스트하기 위해 만들어지기 때문에이 데이터 구조가 올바른 것입니다. 나는 꽤 확신한다. containsObject:은 요소 검색을해야하는 NSArray에서 같은 방법에 비교하여 일정한 시간에 돌아 간다.

+0

다음은 NSArray, NSSet 및 관련 유형 간의 흥미로운 비교입니다. http://cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html – NullUserException

관련 문제