Dictionary <int,string>删除最后一项</int,string>

时间:2011-06-17 08:34:10

标签: c# .net generics

好的,我正在密集。

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

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

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

recentDic.Add(i,someString);

更新:感谢您的评论,您每天都能学到一些东西。我已经转到OrderedDictionay,现在正在使用RemoveAt

8 个答案:

答案 0 :(得分:14)

词典没有保留其元素的任何顺序,因此无法知道最后一个词的含义。

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

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

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

答案 1 :(得分:2)

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

但是你可以得到一些看起来像“最后”的东西:

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

答案 2 :(得分:0)

你可以使用

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

答案 3 :(得分:0)

此?

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

以你的方式试试

 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");

            }

答案 6 :(得分:0)

如果“last”是以时间方式表示的,则可以保留对最后插入的键的引用并删除该键。

答案 7 :(得分:0)

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

  1. 字典的顺序是始终添加每个项目的顺序。字典没有顺序是一种谬论。顺序不是随机的,完全可以预测。
  2. 可以使用 Linq 访问和修改字典的顺序,如上文所述的 Petar Ivanov。如果它对您不起作用(就像它对 Derf Skren 不起作用)确保您在 using System.Linq; 标签中添加 using