所以我有这本字典
Dictionary<ulong, PlayerData> PlayersCache = new Dictionary<ulong, PlayerData>();
我有PlayerData类
public class PlayerData
{
public int Shots;
public int Hits;
public PlayerData()
{
}
}
我该如何对字典进行排序,使命中率最高的玩家排在第一位,第二位命中率最高的玩家将排在第二位,命中率最高的第三位玩家将排在第三位...在字典中将其升序排列。
答案 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