2016-03-13 3 views
0

У меня есть два словаря, которые мне нужно сравнить. Логика этого заключается в том, что если ключ из второго словаря найден между значениями первого словаря, значение из первого должно быть заменено на то, что содержит значение из второго.PowerShell сравнить словари

В этом примере значение «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] 
     } 
    } 
} 

ответ

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 
     } 
    }  
} 
+0

Я не знал о методе ContainsKey. Я собираюсь проверить это. –

+0

@AdrianZ. забыли принять несколько имен свойств во внимание, обновленный ответ –

+0

Я немного изменил ваш код, но это помогло мне, спасибо. –

Смежные вопросы