配列内で最も一般的な (モーダル) 要素を見つける必要があります。
私が考えることができる最も簡単な方法は、一意の要素ごとに変数を設定し、それぞれにカウント変数を割り当てることでした。これは、配列を実行する 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 つの地名を見つける必要があります。