0
핵심 데이터 엔티티의 레코드 그룹화를 수행 한 다음 계산하여 가장 높은 수의 그룹을 찾을 수있는 방법은 무엇입니까?NSSet을 그룹화 한 다음 어떻게 계산합니까?
나는 각각 '승자'를 가진 많은 '다리'가있는 '세트'를 가지고 있습니다. 내가 대답하려고하는 질문은 : 누가 가장 많이 얻었는지.
도움을 주시면 감사하겠습니다. 아, 새해 복 많이 받으세요!
핵심 데이터 엔티티의 레코드 그룹화를 수행 한 다음 계산하여 가장 높은 수의 그룹을 찾을 수있는 방법은 무엇입니까?NSSet을 그룹화 한 다음 어떻게 계산합니까?
나는 각각 '승자'를 가진 많은 '다리'가있는 '세트'를 가지고 있습니다. 내가 대답하려고하는 질문은 : 누가 가장 많이 얻었는지.
도움을 주시면 감사하겠습니다. 아, 새해 복 많이 받으세요!
집합을 반복하고 각 '승자'에 대해 '다리'를 계산하십시오. 사전에 다리 수를 저장하십시오 :
NSMutableDictionary* legCount = [[NSMutableDictionary alloc] init];
NSNumber* count;
for (leg in legsSet) {
id winner = [leg objectForKey:@"winner"]; // assumes leg is a dictionary
if (count = [legCount objectForKey:winner]) {
[legCount setObject:[NSNumber numberWithInt:[count intValue]+1] forKey:winner];
} else {
[legCount setObject:[NSNumber numberWithInt:1] forKey:winner];
}
}
이제 가장 높은 값으로 새 사전에서 키를 찾아야합니다.
id winner = [[legCount keysSortedByValueUsingComparator:^(id obj1, id obj2) {
if ([obj1 intValue] > [obj2 intValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 intValue] < [obj2 intValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}] lastObject];
고맙습니다. 첫 번째 비트가 작동하는 데 문제가 있습니다. 내 다리가 세트이기 때문에 나는 이드 우승자 라인을 다음과 같이 변경했다 : id winner = [leg valueForKey : @ "winner"]; 'NSInvalidArgumentException', 이유 : '- [Players copyWithZone :] : 인식 할 수없는 선택기가 인스턴스 0x4d80180으로 전송되었습니다'라는 이유로 else 행에서 충돌합니다. 또한 "if (count = [legCount objectForKey : winner])"는 무엇을하려고합니까? – lps
코드를 직접 테스트하지 않았습니다. 오브젝트 승자가 유효한 오브젝트인지 확인하십시오 (nil이 아니어야 함). if-line은 키가 이미 설정되어 있는지 확인하고, 아무 것도 값을 1로 설정하지 않았 으면 yes로 변경하고 값을 1 씩 증가시킵니다. 오 .. 그리고 방금 내 코드에서 몇 가지 오류를 발견했습니다 ... 고칠 것입니다. – Felix
승자가 유효합니다. 각 다리마다 승자가 있지만 위의 오류가 발생합니다. – lps