我有一本字典。
Dictionary<int, string> inboxMessages = new Dictionary<int, string>();
此词典包含具有自己唯一ID的消息(消息越新,ID越高)。我把消息放在一个选择器(xamarin)中,但它首先显示最旧的消息。我怎么能改变这个?
选择器:
inboxPicker = new Picker
{
WidthRequest = 320,
};
foreach (string inboxMessage in inboxMessages.Values)
{
inboxPicker.Items.Add(inboxMessage);
}
我如何收到我的讯息:
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);
}
});
}
答案 0 :(得分:2)
字典的Values
property未订购。从文档中引用:
Dictionary<TKey, TValue>.ValueCollection
中值的顺序未指定[...]
如果要按特定顺序检索值,则需要自行排序。例如:
var sorted = inboxMessages.OrderByDescending(kv => kv.Key).Select(kv => kv.Value);
foreach (string inboxMessage in sorted)
{
inboxPicker.Items.Add(inboxMessage);
}
这将从字典中检索KeyValuePairs,按照int
键的顺序对它们进行排序,然后返回值的枚举。
答案 1 :(得分:1)
当您仍然可以访问其键时,您应该对字典条目进行排序:
foreach (string inboxMessage in inboxMessages
.OrderByDescending(m => m.Key)
.Select(m => m.Value)
{
inboxPicker.Items.Add(inboxMessage);
}