如何有效地随机删除值为 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 的键?
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。
这样的事情应该这样做:
IEnumerable<string, int> pairsToRemove = dictionary.Where(pair => pair.Value == 0);
要生成随机索引,您可以使用:
int indexToRemove = [RandomNumber] % pairsToRemove.Length() -1;
从pairToRemove 中找到第indexToRemove 元素并将其从字典中删除。
至于效率:假设随机数生成为恒定的时间。
问题是,没有办法在 O(n) 时间内对字典执行值查找。所以这将是你的瓶颈。
这将删除第一个具有零值的项目。它不是完全“随机”的,而是不确定的。
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);
}