2013-06-04 3 views
0

배열에서 반복되는 시간 항목을 확인하는 방법. 반복적 인 항목이 포함 된 배열이 있습니다. 아래는 배열입니다.배열에서 각 값이 반복되는 횟수를 계산하십시오.

"Family:0", 
"Family:0", 
"Family:0", 
"Gold:3", 
"Gold:3" 

그래서 각 항목에 대해 응답 값 3과 2를 원합니다. 나는 어떻게 그것을 성취 할 수 있는가. 희망은 내 요점을 분명히했다. 명확하지 않은 것이 있으면 물어보십시오.

다음은 시도한 코드입니다.

int occurrences = 0; 
int i=0; 
for(NSString *string in arrTotRows){ 
    occurrences += ([string isEqualToString:[arrTotRows objectAtIndex:indexPath.section]]); //certain object is @"Apple" 
    i++; 
} 
+0

내 대답을 참조 .... yourQuery은 무엇 –

답변

2

여기에 NSCountedSet을 사용할 수 있습니다. 모든 개체를 계산 된 집합에 추가 한 다음 countForObject: 메서드를 사용하여 각 개체의 빈도를 확인합니다.

NSArray *names = [NSArray arrayWithObjects:@"Family:0", @"Family:0", @"Gold:3", @"Gold:3", nil]; 
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:names]; 

    for (id item in set) 
    { 
     NSLog(@"Name=%@, Count=%lu", item, (unsigned long)[set countForObject:item]); 
    } 

발생 횟수 얻기 위해 출력

Name=Gold:3, Count=2 

Name=Family:0, Count=2 
0

NSCountedSet이 바로이 문제를 해결합니다. 모든 문자열을 addObject:으로 추가 한 다음 집합을 열거 할 때 countForObject:으로 최종 개수를 가져옵니다.

7
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:yourArray]; 

:

int objectCount = [countedSet countForObject:yourQuery]; 

을 (를은 원하는 다중성을 가진 객체입니다.) ": 0 가족"은 MULTISET 세 번있다 : 예를 들어, 귀하의 경우에 때문에

int objectCount = [countedSet countForObject:@"Family:0"]; 

objectCount 3 같아야한다.

+0

입니까? –

+0

@iPhone 프로그래밍 방식으로 멀티 세트에있는 모든 개체. 예 :''Family : 0 '', 3을 반환합니다. 내 대답을 업데이트했습니다. –

0

이 시도하시기 바랍니다 ....

int count = 0; 

for (int i = 0; i < array.count; ++i) { 
    NSString *string = [array objectAtIndex:i]; 
    for (int j = i+1; j < array.count; ++j) { 
     if ([string isEqualToString:[array objectAtIndex:j]]) { 
     count++; 
     } 
    } 
관련 문제