Firebase 排序查询给出(未排序的)字典结果
Firebase sort query gives (unsorted) dictionary results
所以我确定我在这里遗漏了一些东西,但是当我想查询某个游戏的前 10 名得分时,Firebase returns 前 10 名得分,但是因为它们随后作为字典返回(使用 childByAutoId 生成的键),它们在客户端收到时是 'unsorted'(因此要显示前 10 个,您必须再次对它们进行排序)...
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
FIRDatabaseQuery *jungleHighscoresQuery = [[[ref child:@"jungleScores"] queryOrderedByChild:@"score"] queryLimitedToLast:4];
[jungleHighscoresQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot){
NSDictionary *postDict = snapshot.value;
NSLog(@"%@", postDict);
}];
上面的代码给出了以下输出(这些是数据库中 ~20 中的前 4 个分数):
{
"-KIUhe_9TLQoy_zNbJT0" = {
score = 290;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUj8VUyNMgyZ135dI_" = {
score = 560;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUjK15Gy9PRB_JBWOA" = {
score = 240;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUlZ1a03r7bjPYNueG" = {
score = 740;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
}
我知道将所有内容重新排序是一项简单的任务,但必须这样做似乎很奇怪。
毕竟有一个简单的解决方案,只需要获取枚举器而不是字典即可:
NSEnumerator *enumerator = snapshot.children;
然后用 [enumerator nextObject]
遍历它们
所以我确定我在这里遗漏了一些东西,但是当我想查询某个游戏的前 10 名得分时,Firebase returns 前 10 名得分,但是因为它们随后作为字典返回(使用 childByAutoId 生成的键),它们在客户端收到时是 'unsorted'(因此要显示前 10 个,您必须再次对它们进行排序)...
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
FIRDatabaseQuery *jungleHighscoresQuery = [[[ref child:@"jungleScores"] queryOrderedByChild:@"score"] queryLimitedToLast:4];
[jungleHighscoresQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot){
NSDictionary *postDict = snapshot.value;
NSLog(@"%@", postDict);
}];
上面的代码给出了以下输出(这些是数据库中 ~20 中的前 4 个分数):
{
"-KIUhe_9TLQoy_zNbJT0" = {
score = 290;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUj8VUyNMgyZ135dI_" = {
score = 560;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUjK15Gy9PRB_JBWOA" = {
score = 240;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
"-KIUlZ1a03r7bjPYNueG" = {
score = 740;
userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
};
}
我知道将所有内容重新排序是一项简单的任务,但必须这样做似乎很奇怪。
毕竟有一个简单的解决方案,只需要获取枚举器而不是字典即可:
NSEnumerator *enumerator = snapshot.children;
然后用 [enumerator nextObject]