代码之家  ›  专栏  ›  技术社区  ›  SamohtVII

无法对Unity中的Firebase数据进行排序。C级#

  •  0
  • SamohtVII  · 技术社区  · 7 年前

    public void getHighScores() {
            FirebaseDatabase.DefaultInstance.GetReference("Scores").OrderByChild("score").LimitToLast(10).ValueChanged += HandleValueChanged;
    }
    
    void HandleValueChanged(object sender, ValueChangedEventArgs args) {
        if (args.DatabaseError != null) {
            Debug.LogError("Error: " + args.DatabaseError.Message);
            return;
        }
        // Do something with the data in args.Snapshot
        var highscoreobject = args.Snapshot.Value as Dictionary<string, System.Object>;
        //Debug.Log(args.Snapshot.Child("score").Value);
        foreach (var item in highscoreobject)
        {
            string userScore = "";
            //Debug.Log(item.Key); // Kdq6...
            var values = item.Value as Dictionary<string, System.Object>;
            var list = item.ToList();
            list.Sort();
            foreach (var v in values)
            {
                //Debug.Log(v.Key + ":" + v.Value); // category:livingroom, code:126 ...
                userScore += v.Value;
            }
            highscoreText.text += userScore+" \n";
        }
    }
    

    enter image description here

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Frank van Puffelen    6 年前

    根据定义,字典中的条目是无序的。意思是你一打电话 args.Snapshot.Value as Dictionary<string, System.Object>

    如果要保持顺序,应该循环快照的子级,并且只调用 .Value 当顺序不再重要时(即当你到达酒店时)。比如说:

    void HandleValueChanged(object sender, ValueChangedEventArgs args) {
        if (args.DatabaseError != null) {
            Debug.LogError("Error: " + args.DatabaseError.Message);
            return;
        }
        foreach (DataSnapshot childSnapshot in snapshot.Children)
        {
            Debug.log(childSnapshot.Key+": "+childSnapshot.Child("uid").Value+" "+childSnapshot.Child("score").Value
        }
    }