2017-06-02 5 views
0

Ich deserialisiere einen JSON-String in ein Wörterbuch in C#, aber ich möchte das Wörterbuch nach einem Wert sortieren, um es auf einer Tabelle mit hohen Punktzahlen anzuzeigen. Das Wörterbuch kehrt jetzt in fester Reihenfolge zurück.Sortierwörterbuch nach Wert C#

var temp = Json.Deserialize(www.text) as Dictionary<string,object>; 
      if (temp != null) 
      { 
       data = (List<object>)temp["_items"]; 
      } 

JSON String

"_items":[ 
     { 
     "_updated":"Thu, 01 Jan 1970 00:00:00 GMT", 
     "_id":"-", 
     "Name":"John Doe", 
     "_links":{ 
      "self":{ 
       "href":"Players/-", 
       "title":"Player" 
      } 
     }, 
     "_created":"Thu, 01 Jan 1970 00:00:00 GMT", 
     "FacebookId":XXXXX, 
     "HighScore":8862, 
     "_etag":"-" 
     }, 
     { 
     "_updated":"Thu, 01 Jan 1970 00:00:00 GMT", 
     "_id":"-", 
     "Name":"John Smith", 
     "_links":{ 
      "self":{ 
       "href":"Players/-", 
       "title":"Player" 
      } 
     }, 
     "_created":"Thu, 01 Jan 1970 00:00:00 GMT", 
     "FacebookId":XXXXXX, 
     "HighScore":32000, 
     "_etag":"-" 
     } 
    ], 

Zell Creation

var dict = (Dictionary<string, object>) data[row]; 


      // Set Name 
      cell.nameText.text = dict["Name"].ToString(); 

      // Set score 
      cell.score.text = string.Format("{0:n0}", dict["HighScore"]); 

      // Fb Profile IMG 
      StartCoroutine(getFBPicture(cell.image, dict["FacebookId"].ToString())); 
+0

Ich empfehle, mit LINQ: https://stackoverflow.com/questions/5949904/c-sharp-sort-dictionary-with-linq – MessLuke

+0

Mögliche Duplikat [Wie Sie ein Wörterbuch nach Wert sortieren Sie?] (Https://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value) – FortyTwo

+0

@ISHIDA durch die HighScore-Variable in der JSON – Prad

Antwort

0

bereits.

public class obj 
       { 
       public DateTime updated {get;set;} 
       public string id {get;set;} 
       public string Name {get;set;} 
       public self links {get;set;} 
       public string FacebookId {get;set;} 
       public int highscore {get;set;} 

       } 

    public class self { 
    public string href {get;set;} 
    public string title {get;set;} 
        } 

       var dic = new Dictionary<TKey, obj>(); 
       var sorted = dic.OrderBy(x=>x.Value.highscore).ToList(); 
0

Wie Sie ein Wörterbuch verwenden, ist es nicht möglich, das Wörterbuch selbst zu sortieren, wie der Zweck des Wörterbuchs es mit einem Hash-Wert zuzugreifen ist. Sie können jedoch eine sortierte Werteliste zurückkehren, indem Sie so etwas wie dies zu tun:

dictionary.Values.OrderyBy(x => (DateTime)x._updated); 

dies vorausgesetzt, Sie so etwas wie Newtonsoft.Json verwenden, um ein Objekt mit accesible Eigenschaften zurückgibt.

Bitte beachten Sie, dass Sie ein Objekt eines Basistyps oder eines Typs verwenden sollten, der IComparable als den zum Definieren der Sortierreihenfolge implementiert.

Verwandte Themen