无法在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,我们如何找到特殊用户的排名?