2

如何有效地随机删除值为 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。

4

2 回答 2

1

这样的事情应该这样做:

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

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

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

从pairToRemove 中找到第indexToRemove 元素并将其从字典中删除。

至于效率:假设随机数生成为恒定的时间。

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

于 2012-12-08T00:03:51.440 回答
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);
}
于 2012-12-08T00:04:26.407 回答