如何按升序对字典进行排序?

时间:2020-04-20 14:36:32

标签: c#

所以我有这本字典

Dictionary<ulong, PlayerData> PlayersCache = new Dictionary<ulong, PlayerData>();

我有PlayerData类

        public class PlayerData
        {
            public int Shots;
            public int Hits;
            public PlayerData()
            {
            }
        }

我该如何对字典进行排序,使命中率最高的玩家排在第一位,第二位命中率最高的玩家将排在第二位,命中率最高的第三位玩家将排在第三位...在字典中将其升序排列。

3 个答案:

答案 0 :(得分:1)

使用LINQ:

var ordered = PlayersCache.OrderByDescending(_ => _.Value.Hits);

您可以添加.ToList()或类似的结尾,具体取决于您希望如何使用它。

答案 1 :(得分:1)

为该类添加一个值ID:

public class PlayerData
{
    public ulong ID;
    public int Shots;
    public int Hits;
    public PlayerData()
    {
    }
}

排序:

Dictionary<ulong, PlayerData> PlayersCache = new Dictionary<ulong, PlayerData>();

// ... adding records to the dictionary

List<PlayerData> lst = new List<PlayerData>();
foreach (var kv in PlayersCache)
{
    lst.Add(kv.Value);
    kv.Value.ID = kv.Key;
}

lst.Sort(delegate (PlayerData x, PlayerData y) {
    return y.Hits.CompareTo(x.Hits);
});

PlayersCache.Clear();

foreach(var p in lst)
{
    PlayersCache.Add(p.ID, p);
}

答案 2 :(得分:0)

字典未排序(尽管是按 key 值排序的实现)。如果要按值排序,则不要使用字典-使用this answer中的List<Key, Value>this answer Lookup >

相关问题