0

我有一个 NSMutableArray,包含 4 个对象。这些对象中的每一个都有一个名为score的 int 类型的属性。该数组按此属性降序排序。这么多就好了。

现在我正在制作一个记分牌,它接收这个数组并枚举它。基本上我需要它来查看array.score属性并为其分配等级。

第 1 - (100 分) 第 2 - (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++;
}
4

1 回答 1

2

通常,当你打平时,你实际上会跳过较低的排名——也就是说,如果你和第二名,你的球员将是第一、第二、第二和第四,没有人获得第三。我会通过这样做来实现这一点:

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++;
}
于 2013-05-24T00:17:31.373 回答