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