2010-12-20 3 views
1

NSArray 주위를 탐색하는 데 문제가 있습니다.NSArray (또는 NSMutableArray)의 최대 요소 찾기

내 배열 : 저를 "중간"요소를 찾는 데 도움이됩니다 오브젝티브 C의 모든 방법

Element[0] = "ElementA" 
Element[1] = "ElementA" 
Element[2] = "ElementA" 
Element[3] = "ElementA" 
Element[4] = "ElementB" 
Element[5] = "ElementC" 

이 있습니까? 이 경우 "중앙값"은 "ElementA"또는 최대 횟수로 발생하는 값입니다.

C#에서는 단일 호출이지만 Objective-C에서 해당 함수를 찾을 수 없습니다.

많은 감사, 브렛

+1

중간 값이 아닙니다. 중앙값은 "평균"과 동의어입니다. 당신이 찾고있는 것은 "모드"입니다. –

답변

3

그냥 당신이 쓴 :

- (NSString *) findModeString: (NSArray *) array { 
    NSMutableDictionary *stats = [[NSMutableDictionary alloc] init]; 
    for(NSString *str in array) { 
     if(![stats objectForKey:str]) { 
     [stats setObject: [NSNumber numberWithInt:1] forKey:str]; 
     } else { 
     [stats setObject: [NSNumber numberWithInt:[[stats objectForKey:str] intValue] + 1] forKey:str]; 
     } 
    } 
    NSInteger maxOccurrences = 0; 
    NSString *max; 
    for(NSString *key in stats) { 
     if([[stats objectForKey:key] intValue] > maxOccurrences) { 
     max = key; 
     maxOccurrences = [[stats objectForKey:key] intValue]; 
     } 
    } 
    [stats release]; 
    return max; 
} 

편집을 내 솔루션은 작동하지만, 당신은 upvote/accept @Dave DeLong의 대답을해야한다, 훨씬 더 좋다. 여기

+1

와우 ... 심각한 명성! 예상했던 것보다 굉장하고 간단합니다. 무리 감사. – Brett

0

방금 ​​사용 할 수 없습니다 :

[myarray length] /2 
+0

은 2로 나눈 원소의 수를 나에게 줄 것이다. 내가 찾고있는 것은 가장 많이 발생하는 원소의 값을 나에게 보여주는 방법이다. 이 예제에서 값은 "ElementA"입니다. – Brett

+0

죄송합니다 - 나는 배열을 정렬 한 다음 그 작업을 수행했습니다. – Brad

+0

이 기술은 쉽고 안전합니다. – arithma

8

내가 그것을 할 거라고 방법은 다음과 같습니다

NSArray * elements = ...; //your array of elements: 
NSCountedSet * counts = [NSCountedSet setWithArray:elements]: 
id modeObject = nil; 
NSUInteger modeCount = 0; 
for (id element in counts) { 
    if ([counts countForObject:element] > modeCount) { 
    modeCount = [counts countForObject:element]; 
    modeObject = element; 
    } 
} 

NSLog(@"element with highest frequency: %@", modeObject); 

NSCountedSet는 요소가 배열에 추가 된 횟수를 기억 NSMutableSet입니다.

+0

@Dave 나는 그런 것을 알고 있었지만 그것을 찾을 수 없었다! 좋은! +1 –

+2

이것은 받아 들여진 대답이어야합니다. 내 것이 아니야. –

+0

이것은 'NSString'뿐만 아니라 모든 객체에서 작동합니다. 굉장해. –