【问题标题】:Dictionary<int,string> Remove last itemDictionary<int,string> 删除最后一项
【发布时间】:2021-04-08 05:55:46
【问题描述】:

好的,我很密集。

如何删除字典中的最后一项?

我有代码检查字典中的数字,如果太多,它总是删除最后一个为下一个腾出空间,但我看不到一个直接的方法

if (recentDic.Count>= recentItemLimit )
  recentDic.RemoveAt(recentDic.Count-1)

recentDic.Add(i,someString);

更新:感谢 cmets,您每天都能学到一些东西。我已移至 OrderedDictionay,现在正在使用 RemoveAt

【问题讨论】:

  • 删除字典中的最后一项是什么意思?字典没有排序,所以你只是要删除最后一个桶中的任何东西?
  • 最后一个是什么意思?最后添加、第一个添加或可能是最后一个键 - 具有最大价值的键?
  • 如果您的 int 代表索引(或顺序),那么您应该删除具有最大键的项目。

标签: c# .net generics


【解决方案1】:

字典不保留其元素的任何顺序,因此无法知道最后一个是什么意思。

如果你想删除一个随机的,你可以像@Richard 所说的那样做:

dict.Remove(dict.Keys.Last());

dict.Remove(dict.Keys.First());

【讨论】:

  • 谁能澄清这个语法,因为它在 VS 2015 和 .NET 4.0 中对我不起作用?
【解决方案2】:

正如@fiver 所说:字典没有顺序,所以“最后一项”没有任何意义。

但是你可以得到看起来像“last”的东西:

dict.Remove(dict.Keys.Last());

【讨论】:

    【解决方案3】:

    你可以使用

    recentDic.Remove(d.Last().Key);
    

    【讨论】:

      【解决方案4】:

      这个?

      var dictionary = new Dictionary<int, string>();
      dictionary.Remove(dictionary /* .OrderBy(o => o.Value) */ .Last().Key);
      

      【讨论】:

        【解决方案5】:

        但是,如果您想根据某种顺序删除某种元素,请尝试使用SortedDictionary。然后您可以使用dict.Remove(dict.Keys.Last()) 删除最后一个密钥,正如其他人所指出的那样。

        【讨论】:

          【解决方案6】:

          如果“last”是暂时的,您可以保留对最后插入的键的引用并删除该键。

          【讨论】:

            【解决方案7】:

            用你的方式试试这个

             Dictionary<int, string> recentDic=new Dictionary<int,string>();
                        recentDic.Add(1,"vijay");
                        recentDic.Add(2,"ajay");
            
                        if (recentDic.Count >= 2)
                        {
                            int last = recentDic.Keys.Last();
                            recentDic.Remove(last);
                            recentDic.Add(last, "rahul");
            
                        }
            

            【讨论】:

              【解决方案8】:

              为了未来读者的利益,对上述错误信息进行一些更正:

              1. 字典的顺序是始终添加每个项目的顺序。字典没有顺序是错误的。顺序不是随机的,而是完全可以预测的。
              2. 可以使用Linq 访问和修改字典的顺序,就像上面解释的Petar Ivanov。如果它不适合您(就像它不适合 Derf Skren),请确保在您的 using 标签中添加 using System.Linq;

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-10-04
                • 2011-03-05
                • 2010-10-17
                • 2018-01-25
                相关资源
                最近更新 更多