【发布时间】:2015-02-21 02:05:02
【问题描述】:
我需要在数组中找到最常见的(模态)元素。
我能想到的最简单的方法是为每个唯一元素设置变量,并为每个元素分配一个计数变量,每次记录在遍历数组的 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);
在我的程序中,我需要在一个数组中查找前五个地名。
【问题讨论】:
-
“前 5 名”是什么意思。您的数组是否多次包含相同的元素?你想知道哪些是最顶级的吗?
-
该数组将包含一个城市名称列表,用户签到的地方。我需要对数组中的元素进行排序,以输出用户签到次数最多的五个地方.所以是的,数组中的元素会重复多次
标签: arrays swift nscountedset