2017-05-30 45 views
0

我目前有一個firebase項目,可以解析網絡中的數據。c#和unity3d中的有序字典FIREBASE

所有的數據都下來了,但我想要扭轉結果的順序。

我在我的獲取數據的方法去下面的代碼

public class ExampleItemModel{ 

    public string name; 
    public string score; 
    public string level; 
    public int iconIdx1, iconIdx2, iconIdx3; 
} 

那麼實現這一目標: -

public void GetDataFromFireBase(string reference, Action<ExampleItemModel[]> onDone){ 


     FirebaseDatabase.DefaultInstance 
      .GetReference(reference).OrderByChild("score") 
      .GetValueAsync().ContinueWith(task => { 
      if (task.IsFaulted) { 
       // Handle the error... 
       print("Error: " + task.Exception); 
      } 
      else if (task.IsCompleted) { 
       DataSnapshot snapshot = task.Result; 
       // Do something with snapshot... 

       var items = snapshot.Value as Dictionary<string, object>; 
       int count = items.Count; 
       var results = new ExampleItemModel[count]; 
       int i = 0; 
       foreach(var item in items){ 
        results[i] = new ExampleItemModel(); 

        //print("items = " + item); 
         var values = item.Value as Dictionary<string, object>; 

          if (reference == "scores"){ 
          print("values count =" + values.Count); 

           foreach(var value in values){ 

            if(value.Key == "name"){ results[i].name = "" + value.Value;} 
            if(value.Key == "score"){ print("Score = " + value.Value); results[i].score = "" + value.Value;} 
            if(value.Key == "level"){ results[i].level = "" + value.Value;} 

           } 
          i++; 
          } 
      onDone(results); 

} 

      }); 

} 

香港專業教育學院試過如下: -

在火力規則我已經

套裝

".indexOn":"score", 
"score": { 
    ".indexOn": ".value" 
} 

我也嘗試添加的代碼

  results = results.OrderByDescending(x => x.score); 
      onDone(results); 

以下行,但我得到以下錯誤

嚴重性:「錯誤」 消息:「無法隱式轉換類型‘System.Linq.IOrderedEnumerable’以 'ExampleItemModel []'[大會-CSHARP]」 在: '137,14' 來源: ''

會有人請能夠幫助

感謝

+0

這通常是通過對具有倒數值的新字段建立索引來完成的。看到這個答案:https://stackoverflow.com/a/34158197/4816918 – Jeff

回答

0

感謝傑夫您迴應

在此背後,我設法命令通過執行結果如下

List <ExampleItemModel> orderedArray = results.OrderByDescending(x => x.score).ToList(); 

希望這將幫助別人這個問題在未來