我试图在两个循环中清除和替换哈希集中的值。
我相信我已经使用了清晰的方法,但是我似乎无法将值重新添加到HashSet中。
public void ReplaceValues(string s, IEnumerable<string> newValues)
{
foreach(KeyValuePair<string, HashSet<string>> kvp in deps) //deps is a dictionary<string, HashSet<string>>
dictionary[s].Clear();
foreach(KeyValuePair<string, HashSet<string>> kvp in deps)
//cannot figure out one line to replace the values with the new dependents, throws error code here
}
我希望先清除(a,b)形式的kvps,然后再添加新值,将其替换为(a,c)
答案 0 :(得分:1)
我认为您无需遍历字典即可获得配对。有了输入参数中的键后,您可以像下面这样在单行中替换字典项的值。
node.getLeft().getStudent().name
尝试输入代码here
更新:如果要持久保留需要替换其值的Hashset的引用,则遍历newValues中的每个项目并将其清除后将它们添加到现有的HashSet对象中,如下面的-< / p>
public static void ReplaceValues(string s, IEnumerable<string> newValues)
{
if(dictionary.ContainsKey(s))
dictionary[s] = new HashSet<string>(newValues);
}
答案 1 :(得分:1)
您可以执行以下操作:
public void ReplaceValues(string s, IEnumerable<string> newValues)
{
if (deps.TryGetValue(s, out var hs)) {
hs.Clear();
foreach (var value in newValues)
{ hs.Add(value); }
}
}