C# 如何按升序对词典排序?
所以我有这本字典C# 如何按升序对词典排序?,c#,C#,所以我有这本字典 Dictionary<ulong, PlayerData> PlayersCache = new Dictionary<ulong, PlayerData>(); 如何对字典进行排序,使命中率最高的玩家成为第一名,命中率最高的第二名玩家成为第二名,命中率最高的第三名玩家成为第三名。。。在字典中,按升序排序。使用LINQ: var ordered = PlayersCache.OrderByDescending(_ => _.Value.Hits)
Dictionary<ulong, PlayerData> PlayersCache = new Dictionary<ulong, PlayerData>();
如何对字典进行排序,使命中率最高的玩家成为第一名,命中率最高的第二名玩家成为第二名,命中率最高的第三名玩家成为第三名。。。在字典中,按升序排序。使用LINQ:
var ordered = PlayersCache.OrderByDescending(_ => _.Value.Hits);
您可以将.ToList()或类似内容添加到end,具体取决于您希望如何使用它 将值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);
}
Dictionary PlayersCache=new Dictionary();
// ... 向词典中添加记录
List lst=新列表();
foreach(PlayerCache中的var kv)
{
第一次增加(千伏值);
kv.Value.ID=kv.键;
}
一级排序(委托(PlayerData x,PlayerData y){
返回y.Hits.CompareTo(x.Hits);
});
PlayersCache.Clear();
foreach(lst中的var p)
{
PlayersCache.Add(p.ID,p);
}
字典是未排序的(尽管它们是按键值排序的实现)。如果要按值排序,则不要使用字典-请使用中提供的列表,或使用中提供的排序查找,作为半放弃是可以的,但以后请不要作为可用变量。@Sinatr您的观点是有效的,但从这个问题来看,我认为它并不特别重要。我通常是从PlayersCache上读的?foreach(BasePlayer.activePlayerList中的var-aPlayer){if(PlayersCache.ContainsKey(aPlayer.userID)){这部分:foreach(BasePlayer.activePlayerList中的var-aPlayer){if(PlayersCache.ContainsKey(aPlayer.userID))}
不在您问题中的代码中。您何时执行此代码?我执行此代码是为了为每个玩家创建UI面板等。它位于UnityEngineine中看起来与您的问题无关。您是在排序之前还是之后执行此代码?我每2秒执行一次
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);
}