花了30分鐘找到一個解決方案,找到最多3個值...
有一個嘗試:
NSArray *[email protected][@"01/01/2013", @"01/01/2013", @"01/01/2013", @"21/02/2013", @"01/06/2013", @"11/02/2013", @"01/03/2013", @"01/03/2013", @"22/05/2013", @"23/05/2013", @"27/05/2013", @"01/06/2013", @"07/07/2013", @"12/08/2013"];
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);
輸出:
2013-11-21 20:50:45.475 Demo[19256:8c03] Dict : {
"01/01/2013" = 3;
"01/03/2013" = 2;
"01/06/2013" = 2;
"07/07/2013" = 1;
"11/02/2013" = 1;
"12/08/2013" = 1;
"21/02/2013" = 1;
"22/05/2013" = 1;
"23/05/2013" = 1;
"27/05/2013" = 1;
}
2013-11-21 20:50:45.476 Demo[19256:8c03] --> 01/01/2013
2013-11-21 20:50:45.477 Demo[19256:8c03] --> 01/03/2013
2013-11-21 20:50:45.477 Demo[19256:8c03] --> 01/06/2013
2013-11-21 20:50:45.478 Demo[19256:8c03] top 3 = (
"01/01/2013",
"01/03/2013",
"01/06/2013"
)
您可以創建的NSSet,然後循環直到計數出現... –
這些日期('NSDate'對象)或字符串('NSString'對象)? – trojanfoe
-1你用錯誤的需求描述誤導了我。根據你的個人資料,我應該預料到這一點:-)「我想要做的是挑選前三名日期」是不明確的。 – trojanfoe