字典改变顺序

时间:2017-01-15 13:20:00

标签: c# dictionary xamarin

我有一本字典。

  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);
            }
        });
    }

2 个答案:

答案 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);
}