我需要在数组中找到最常见的(模态)元素.
@H_404_14@我能想到的最简单的方法是为每个唯一元素设置变量,并为每个元素分配一个计数变量,每次在一个贯穿数组的for循环中记录它时都会增加.
不幸的是,数组的大小是未知的并且将非常大,因此这种方法是无用的.
我在Objective-C中遇到了一个类似的问题,它使用NSCountedSet方法对数组元素进行排名.不幸的是,我对编程非常陌生,只能将第一行翻译成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);
在我的程序中,我需要在数组中找到前五个地名.