如何根据值从字典中随机删除一个键?

时间:2012-12-07 23:58:35

标签: c# random dictionary

如何有效地随机删除值为0的键?

Dictionary<string, int> dict = new Dictionary<Edge, int>();
dict.add("a",0);
dict.add("b",0);
dict.add("c",0);
dict.add("d",1);

字典的大小是10000。

2 个答案:

答案 0 :(得分:1)

这样的事情应该这样做:

IEnumerable<string, int> pairsToRemove = dictionary.Where(pair => pair.Value == 0);

要生成随机索引,您可以使用:

int indexToRemove = [RandomNumber] % pairsToRemove.Length() -1;

从pairsToRemove中找到indexToRemove th元素并将其从字典中删除。

关于效率: 假设随机数生成是恒定时间,复杂度应为O(n)[得到值为0的所有项目] + O(.6N)[找到要删除的值] + O(log(n))[删除]。 / p>

问题是,无法在O(n)时间内对字典执行值查找。这将是你的瓶颈。

答案 1 :(得分:0)

这将删除零值的第一个项目。它不是“随机”的,而是非确定性的。

Dictionary<string, int> dict = new Dictionary<string, int>();
string keyToRemove = null;
foreach (var kvp in dict)
{
    if (kvp.Value == 0)
    {
        keyToRemove = kvp.Key;
        break;
    }
}
if (keyToRemove != null)
{
    dict.Remove(keyToRemove);
}