我需要比较两个词典。这背后的逻辑是,如果在第一个字典的值之间找到第二个字典中的键,则第一个字典中的值需要被第二个字典中的值替换。
所以在这个例子中,值' MemberOf'在FIRST字典中,应该用SECOND字典中的键值替换。我想改变这个值,而不是创建一个新的字典/列表。
解决方案应该能够在PowerShell v2中运行。
$base_properties = `
@{
'user' = `
('CN', 'MemberOf')
}
$expression_properties = `
@{
'MemberOf' = @{name='MemberOf';expression={$_.MemberOf -join ';'}}
}
最终解决方案:
foreach ($prop_key in $base_properties.Keys) {
foreach ($prop_name in $base_properties[$prop_key]) {
if ($expression_properties.ContainsKey($prop_name)) {
$index = $base_properties[$prop_key].IndexOf($prop_name)
$base_properties[$prop_key][$index] = $expression_properties[$prop_name]
}
}
}
答案 0 :(得分:2)
只需使用Keys
循环遍历第一个字典的foreach
,然后使用ContainsKey()
方法在第二个字典中查找值名称:
# New hashtable to hold the original and substituted expressions
$modified_properties = @{}
# iterate over the base properties
foreach($prop_key in $base_properties.Keys)
{
# iterate over each property in the entry and assign the result to the new hashtable
$modified_properties[$prop_key] = foreach($prop_name in $base_properties[$prop_key]){
if($expression_properties.ContainsKey($prop_name))
{
# second dictionary contains an expression for the current name
$expression_properties[$prop_name]
}
else
{
# no expression found, use original string
$prop_name
}
}
}