因此,要对排行榜数据做一些有用的事情,首先必须从GKScore
获取GKLeaderboard
的数组,然后为每个分数获取相应的GKPlayer
s。
一旦你有了这个,你可能想要一个字典映射玩家得分或分数给玩家或playerID
s得分value
或其他一些。使用+[NSDictionary dictionaryWithObjects:forKeys:]
设置这样的字典会很好,因为我们已经有了数组。
问题是:这些数组保证的顺序是否相同?即可以安全地执行以下操作:
GKLeaderboard *leaderboard = [[GKLeaderboard alloc] init];
[leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
NSArray *playerIDs = [scores valueForKey:@"playerID"];
[GKPlayer loadPlayersForIdentifiers:playerIDs withCompletionHandler:^(NSArray *players, NSError *error) {
self.scores = [NSDictionary dictionaryWithObjects:scores forKeys:players];
}];
}];
(为简洁起见,省略了错误处理和ARC安全性。)
我知道[scores valueForKey:@"playerID"]
将以与分数相同的顺序为我提供一个playerID
数组 - 这就是数组valueForKey:
应该做的事情。但是loadPlayers
的完成处理程序是否保证获取的玩家得分数组与输入的顺序相同?我已经创建了一些沙盒帐户并完成了一些测试,看起来排序顺序总是匹配,但这并不能保证。
文档中没有任何说法。 (它确实说在错误的情况下数组可能包含部分结果,在这种情况下它显然不会映射到输入,但是无错误情况呢?)对{{{}上的两个数组进行排序非常简单当然,但如果总是已经对数组进行排序,那么必须花时间对数组进行排序会很遗憾。
答案 0 :(得分:0)
我猜它与方法名称相同但不保证它和实现细节。我想我不会依赖它。
我会再次调用sort ...现在(因为它们已经排序)将导致排序算法的最佳情况运行时...所以。上)。在任何情况下,你都会是圣人:)