Невозможно упорядочить данные Firebase в Unity.C # - PullRequest
0 голосов
/ 09 октября 2018

У меня есть поиск в интернете, где я иду не так, и не могу на всю жизнь выяснить, почему эти данные не возвращаются в порядке.Может кто-то указать, где я ошибаюсь в этом коде .... Это должна быть простая таблица рекордов, но она просто возвращается по порядку, как в базе данных.

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 Ответ

0 голосов
/ 09 октября 2018

Элементы в словаре по определению неупорядочены.Это означает, что, как только вы вызовете 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...