Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Unity中对Firebase数据进行排序。C#_C#_Firebase_Unity3d_Firebase Realtime Database - Fatal编程技术网

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

无法在Unity中对Firebase数据进行排序。C#,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我已经在互联网上搜索了我的错误所在,但我一辈子都找不到为什么这些数据没有按顺序返回。有人能指出我在这段代码中出错的地方吗。。。。它应该只是一个简单的高分表,但只是按照数据库中的顺序返回 public void getHighScores() { FirebaseDatabase.DefaultInstance.GetReference("Scores").OrderByChild("score").LimitToLast(10).ValueChanged += HandleVal

我已经在互联网上搜索了我的错误所在,但我一辈子都找不到为什么这些数据没有按顺序返回。有人能指出我在这段代码中出错的地方吗。。。。它应该只是一个简单的高分表,但只是按照数据库中的顺序返回

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";
    }
}
public void getHighScores(){
FirebaseDatabase.DefaultInstance.GetReference(“分数”).OrderByChild(“分数”).LimitToLast(10).ValueChanged+=HandleValueChanged;
}
void HandleValueChanged(对象发送方,ValueChangedEventArgs参数){
if(args.DatabaseError!=null){
LogError(“错误:+args.DatabaseError.Message”);
返回;
}
//对args.Snapshot中的数据执行一些操作
var highscoreobject=args.Snapshot.Value作为字典;
//Debug.Log(args.Snapshot.Child(“score”).Value);
foreach(highscoreobject中的变量项)
{
字符串userScore=“”;
//Debug.Log(item.Key);//Kdq6。。。
var values=项。值作为字典;
var list=item.ToList();
list.Sort();
foreach(值中的var v)
{
//Debug.Log(v.Key+“:”+v.Value);//类别:livingroom,代码:126。。。
userScore+=v.值;
}
highscoreText.text+=userScore+“\n”;
}
}


谢谢

根据定义,字典中的条目是无序的。这意味着,只要调用
args.Snapshot.Value as Dictionary
,有关快照子节点顺序的任何信息都将丢失

如果要保持顺序,应循环快照的子项,并且仅在顺序不再重要时(即,当您访问属性时)调用
.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
    }
}

根据定义,字典中的条目是无序的。这意味着,只要调用
args.Snapshot.Value as Dictionary
,有关快照子节点顺序的任何信息都将丢失

如果要保持顺序,应循环快照的子项,并且仅在顺序不再重要时(即,当您访问属性时)调用
.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
    }
}

如果尝试orderByValue()而不是OrderByChild(),会怎么样?它只返回相同的顺序。我无法使用OrderByValue指定order by的任何值,因为它不接受任何参数。还有其他建议吗?如果尝试orderByValue()而不是OrderByChild(),会怎么样?它只返回相同的顺序。我无法使用OrderByValue指定order by的任何值,因为它不接受任何参数。还有其他建议吗?太好了,谢谢。我稍后会试试这个,看看我会怎么做。有没有更好的方法在Unity中输出数组而不是Debug.Log?嗨@Frank,我们如何找到特殊用户的排名?太棒了,谢谢。我稍后会试试这个,看看我会怎么做。有没有更好的方法在Unity中输出数组而不是Debug.Log?嗨@Frank,我们如何找到特殊用户的排名?