【问题标题】:How to sort Dictionary by ascending? [duplicate]如何按升序对字典进行排序? [复制]
【发布时间】:2020-08-03 02:40:23
【问题描述】:

所以我有这本词典

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

我有类 PlayerData

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

我如何对字典进行排序,这样点击次数最多的玩家将是第一名,点击次数最多的第二名玩家将排名第二,点击次数最多的第三名玩家将排名第三...在字典中按升序排序。

【问题讨论】:

    标签: c#


    【解决方案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);
    }
    

    【讨论】:

    • 我从 PlayersCache 中正常读取? foreach (var aPlayer in BasePlayer.activePlayerList) { if (PlayersCache.ContainsKey(aPlayer.userID)) {
    • 这部分:foreach (var aPlayer in BasePlayer.activePlayerList) { if (PlayersCache.ContainsKey(aPlayer.userID)) } 不在您问题的代码中。你什么时候执行这段代码?
    • 我执行它为每个玩家创建 UI 面板等...它在 UnityEngine 中
    • 看起来这与您的问题无关。你是在排序之前还是之后执行的?
    • 我每2秒执行一次看imgur.com/qVyyaOu.png
    【解决方案2】:

    使用 LINQ:

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

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

    【讨论】:

    • _ 作为半丢弃是可以的,但以后请不要作为可用的变量。
    • @Sinatr 你的观点是正确的,但从这个问题来看,我认为这并不是特别重要。
    【解决方案3】:

    字典是未排序的(尽管这是按 key 值排序的实现)。如果您想按值排序,请不要使用字典 - 使用 List&lt;Key, Value&gt; 中的 this answer 或排序后的 Lookup 中提供的 this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-14
      • 2021-06-28
      • 2012-08-09
      • 2013-06-09
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多