我有一个NSMutableArray,包含4个对象。这些对象中的每一个都具有int类型的属性,称为 score 此数组按此属性降序排序。那很好。
现在我正在制作一个记分牌,它接收这个数组并通过它进行枚举。基本上我需要它来查看 array.score 属性并为其分配排名。
第1名 - (100分) 第二 - (90分) 第3名 - (50分) 第4 - (10分)
但问题是,当我有分数关系时,我需要它像:
第1名 - (100分) 第1名 - (100分) 第3 - (60分) 第3 - (60分)
基本上,我需要将领带分数显示为关系。看起来真的很简单......但是我的大脑现在正在努力解决这个问题。
这就是我所拥有的(这不起作用):
// If we have the same score, the rank does not change
int rank = 1;
int rankWithTies = 1;
int previousScore = 0;
NSLog(@"------- PLAYER SCORES ------");
for (PlayerStat *stat in rotatorSorted) {
if (stat.score < previousScore) {
NSLog(@"A %i. Player %i - score:%i", rank, stat.playerNumber, stat.score);
rankWithTies++;
} else {
previousScore = stat.score;
NSLog(@"B %i. Player %i - score:%i", rankWithTies, stat.playerNumber, stat.score);
}
rank++;
}
答案 0 :(得分:2)
通常情况下,当你有平局时,你实际上跳过了较低的等级 - 也就是说,如果你有一个并列第二,你的球员将分别是第1,第2,第2和第4,没有人获得第3名。我会通过做这样的事情来实现这一点:
NSUInteger rankIgnoringTies = 1;
NSUInteger rankWithTies = 1;
NSUInteger previousScore = NSUIntegerMax;
NSLog(@"------- PLAYER SCORES ------");
for (PlayerStat *stat in rotatorSorted) {
if(stat.score < previousScore) {
// This is not a tie, so we should move rankWithTies to the next rank.
rankWithTies = rankIgnoringTies;
}
NSLog(@"%i. Player %i - score:%i", rankWithTies, stat.playerNumber, stat.score);
previousScore = stat.score;
rankIgnoringTies++;
}