2017-01-15 5 views
1

Ich habe ein Wörterbuch.Wörterbuch Änderung der Reihenfolge

Dieses Wörterbuch enthält Nachrichten mit ihrer eigenen eindeutigen ID (je neuer die Nachricht, desto höher die ID). Ich lege die Nachrichten in einen Picker (Xamarin), aber es zeigt zuerst die ältesten Nachrichten. Wie kann ich das ändern?

Der Kommissionierer:

inboxPicker = new Picker 
     { 
      WidthRequest = 320, 
     }; 
     foreach (string inboxMessage in inboxMessages.Values) 
     { 
      inboxPicker.Items.Add(inboxMessage); 
     } 

Wie ich meine Nachrichten erhalten:

 private async Task getMessages() 
    { 
     await Task.Run(async() => { 
      MailModel[] mails = await api.GetMails(App.userInfo.user_id); 

      foreach (MailModel mail in mails) 
      { 
       inboxMessages.Add(mail.message_id,mail.sender_user_id +" "+ mail.subject +" "+ mail.time_send); 
      } 
     }); 
    } 

Antwort

1

Sie sollten die Wörterbucheinträge sortieren, während Sie noch Zugriff auf die Schlüssel haben:

foreach (string inboxMessage in inboxMessages 
    .OrderByDescending(m => m.Key) 
    .Select(m => m.Value) 
{ 
    inboxPicker.Items.Add(inboxMessage); 
} 
+0

Es funktioniert, aber es muss sein (m => m.Wert)) – JeroenM

2

Die Values property eines Wörterbuchs ist nicht bestellt. Zitat aus der Dokumentation:

Die Reihenfolge der Werte in der Dictionary<TKey, TValue>.ValueCollection ist nicht spezifiziert [...]

Wenn Sie die Werte in einigen bestimmten Reihenfolge abrufen möchten, müssen Sie es sortieren selbst . Zum Beispiel:

var sorted = inboxMessages.OrderByDescending(kv => kv.Key).Select(kv => kv.Value); 

foreach (string inboxMessage in sorted) 
{ 
    inboxPicker.Items.Add(inboxMessage); 
} 

Dies ruft die KeyValuePairs aus dem Wörterbuch, sortiert sie auf ihre int Schlüssel absteigend und gibt dann eine Aufzählung der Werte.

+0

Er sagt, dass das Wörterbuch OrderByDesc keine Definition enthalten. – JeroenM

+0

@ JeroenM: Typo, sollte 'OrderByDescending' sein. Danke, behoben. – Heinzi

+0

Sowohl Ihre als auch C.Evenhuis Antwort funktionieren. Akzeptierte das andere zuerst, weil es zuerst funktionierte. Aber beide Antworten machen den Job. Vielen Dank! Ich muss zugeben, dass es mir gefällt, dass du ein bisschen mehr erklärt hast. – JeroenM

Verwandte Themen