Извините за несколько общее название, если у кого есть лучшее предложение, пожалуйста, дайте мне знать.Получите массив из 3 упорядоченных значений, предпочитая указанное значение
В основном я пишу пользовательский вид в виде списка, в котором я хочу показать только 3 оценки. Если возможно, он покажет текущий счет пользователя в середине, но если пользователь находится в верхней или нижней части списка, он должен по-прежнему показывать 3 балла, но он отображает других пользователей выше или ниже списка.
например.
- Me (Если я сверху, а затем показать 2 ниже)
- Пользователь 1
- Пользователь 2
или
- Пользователь 1
- Me (обычный случай где я нахожусь в середине двух оценок)
- Пользователь 2
или
- Пользователь 1
- Пользователь 2
- Me (Если я донную показывают две оценки выше меня)
У меня есть функция написано, что делает первая часть этого, но не учитывает крайние случаи, с которыми я борюсь. Кто-нибудь может посоветовать?
-(void)getNearbyScores:(int)score{
GCLeaderboardScore *closestScoreAbove = nil; //Custom container for GC properties
GCLeaderboardScore *closestScoreBelow = nil; //Contains playerID, score, alias etc
if ([playerScores count] == 0){ //playerScores is an NSMutableDictionary
return;
}
for (NSString* key in playerScores) {
GCLeaderboardScore *playerScore = (GCLeaderboardScore *)[playerScores objectForKey:key];
if ((closestScoreAbove == nil || closestScoreAbove->score > playerScore->score) && playerScore->score > score){
closestScoreAbove = playerScore;
}
else if ((closestScoreBelow == nil || closestScoreAbove->score < playerScore->score) && playerScore->score < score){
closestScoreBelow = playerScore;
}
}
me->score = score;
me->rank = 1;
if (closestScoreAbove != nil) {
me->rank = closestScoreAbove->rank + 1;
nearbyScores = [NSMutableArray arrayWithObjects: closestScoreAbove, me, closestScoreBelow, nil];
}
else {
nearbyScores = [NSMutableArray arrayWithObjects: me, closestScoreBelow, nil];
}
}
Используя двоичное дерево поиска, довольно легко изменить алгоритм поиска, чтобы выполнить именно то, что вам нужно. – Justin
Вместо того, чтобы найти 1 балл чуть выше и 1 балл чуть ниже, попробуйте найти 2 балла чуть выше и 2 балла чуть ниже «мой счет». –
@AbhishekBansal Я думал об этом, но проблема в том, что если я это сделаю, тогда есть шанс (я думаю), я не найду второй ближайший результат, если я не зациклирую дважды, что я не хочу делать – Chris