2017-07-17 86 views
-1

我想獲得前10名用戶的遊戲高分,並在表格視圖中顯示它們。如何從價值降序的Firebase中獲取數據?

leaderboards 
CQVudhI2OjTfNbqWOWi2T1DTWKw2 
HIGH-SCORE: 23 
PLAYER-NAME: Russell 
REACTION-TIME: .9 
SWIPES: 12 

F9IbjpVSE8g5YN3PX0sdhSNGULJ3 
HIGH-SCORE: 29 
PLAYER-NAME: Clayton 
REACTION-TIME: .87 
SWIPES: 22 

HDIHCUSJDHCJHZKSHJXH 
HIGH-SCORE: 89 
PLAYER-NAME: Damien 
REACTION-TIME: .77 
SWIPES: 32 

jdhsjdbwkjsdkahnkdnk232j3j2 
HIGH-SCORE: 43 
PLAYER-NAME: Christopher 
REACTION-TIME: .99 
SWIPES: 32 

在表格視圖中,我希望展示10個最高得分者的名字和得分。

任何幫助,將不勝感激。謝謝

回答

2

Firebase沒有任何方法通過查詢來反轉排序順序。但是,如果您將分數存儲爲負值,那麼這非常容易。

這裏的一個結構

scores 
    score_0 
    amt: -20 
    score_1 
    amt: -10 
    score_2 
    amt: -12 
    score_3 
    amt: -1 
    score_4 
    amt: -22 

,然後將代碼讀取三甲 '高' 的22分,隨後20和12

let scoresRef = self.ref.child("scores") 
    let queryRef = scoresRef.queryOrdered(byChild: "amt").queryLimited(toFirst: 3) 

    queryRef.observeSingleEvent(of: .value, with: { snapshot in 
     for child in snapshot.children { 
      let snap = child as! DataSnapshot 
      print(snap.value) 
     } 
    }) 

和輸出

Optional({ 
    amt = "-22"; 
}) 
Optional({ 
    amt = "-20"; 
}) 
Optional({ 
    amt = "-12"; 
}) 

當然,如果分數有限,他們可以讀入數組並排序。

爲了保持完整性,如果您不想將分數存儲爲負值,以下是如何工作的。

​​

上面的代碼經由queryLimited(toLast),它們是12,20和22,並填充一個陣列中的三個最高值的讀取。陣列可以顛倒,按降序排列22,20和12.

最後一個選項是將它們讀爲12,22,20,但是將每個amt插入到位置0的數組中。所以12將位於索引0 ,那麼22將在索引0,而12將在索引1等。

+0

感謝大家的幫助!我做的是做一個querylimted(到最後10)這是我得到了10個最高分,然後將它添加到一個數組並將其逆轉。這被認爲是足夠好的代碼? –

+0

@russsellphillips如果它有效,穩定和易於維護,那絕對是的,它已經足夠好了!如果我的答案有幫助,請接受它,以便它可以幫助其他人! – Jay

+0

完成了!萬分感謝 –

0

我想你必須首先將所有的數據庫加載到一個結構數組中,將數組過濾到新的數組中(如何執行此操作,請檢查here),然後在tableView上表示它。順便說一下,如果您只是從Firebase開始,我強烈建議您閱讀this教程。我希望我的回答很有用:)

+0

這個答案是錯誤的。 – Jay