배열에서 가장 일반적인 (모달) 요소를 찾아야합니다.가장 일반적인 배열 요소
내가 생각할 수있는 가장 단순한 방법은 각 고유 요소에 대해 변수를 설정하고 각각에 대해 개수 변수를 할당하는 것이 었습니다.이 변수는 배열을 통해 실행되는 for 루프에 기록 될 때마다 증가합니다.
배열의 크기는 알 수 없으므로 매우 클 것이므로이 방법은 쓸모가 없습니다.
NSCountedSet 메서드를 사용하여 배열 요소의 순위를 매기는 비슷한 질문이 Objective-C에서 발견되었습니다. 불행히도 나는 프로그래밍에 익숙하지 않으며 첫 번째 라인 만 Swift로 번역 할 수 있습니다. 다음과 같이
제안 된 방법은 다음과 같습니다
var yourArray: NSArray! // My swift translation
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:yourArray];
NSMutableDictionary *dict=[NSMutableDictionary new];
for (id obj in set) {
[dict setObject:[NSNumber numberWithInteger:[set countForObject:obj]]
forKey:obj]; //key is date
}
NSLog(@"Dict : %@", dict);
NSMutableArray *top3=[[NSMutableArray alloc]initWithCapacity:3];
//which dict obj is = max
if (dict.count>=3) {
while (top3.count<3) {
NSInteger max = [[[dict allValues] valueForKeyPath:@"@max.intValue"] intValue];
for (id obj in set) {
if (max == [dict[obj] integerValue]) {
NSLog(@"--> %@",obj);
[top3 addObject:obj];
[dict removeObjectForKey:obj];
}
}
}
}
NSLog(@"top 3 = %@", top3);
내 프로그램에서 내가 배열에서 상위 5 곳의 이름을 찾아야합니다.
"상위 5 개"란 무엇을 의미합니까? 배열에 동일한 요소가 여러 번 포함되어 있습니까? 가장 많이 찾는 사람들을 알고 싶습니까? –
배열에는 사용자가 체크인 한 도시 이름 목록이 포함됩니다. 사용자가 체크인 한 다섯 자리를 가장 많이 출력하도록 배열의 요소를 정렬해야합니다. 그래서 yes 배열에 요소가 여러 번 반복 될 것입니다 – TimWhiting