Как выбрать конкретный ключ и значение хеш-таблицы при сравнении двух хеш-таблиц с Powershell? - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно сравнить и объединить две хеш-таблицы, но сохранить значение определенного ключа.

$Left = @{Name = "Alex"; CreationDate = "2018-10-20"; Status = "Married"}
$Right = @{CreationDate = "2019-03-15"; Status = "Divorced"; City = "NY"; Country = "US"}

Как только эти два слиты, Имя не должно быть изменено , CreationDate должен оставаться"2001-10-20", как в таблице $ Left, необходимо состояние будет обновлен, а город и страна должны быть добавлены в список. Следующий скрипт корректно обновляет, добавляет и сохраняет значения для всех ключей, но он переопределяет мою CreationDate.

Это для обновления некоторых тегов файлов с помощью Powershell.

function New-Result($Key, $Value) {
        New-Object -Type PSObject -Property @{
                    Key    = $Key
                    Value = $Value
            }
    }
    [Object[]]$Results = $Left.Keys | % {
        if ($Left.ContainsKey($_) -and !$Right.ContainsKey($_)) {
            New-Result $_ $Left[$_]
        }
    }
    $Results += $Right.Keys | % {
        if (!$Left.ContainsKey($_) -and $Right.ContainsKey($_) -and ($Right[$_])){
                New-Result $_ $Right[$_]

        }
    }

    $Results += $Right.Keys | % {
        if ($Left.ContainsKey($_) -and $Right.ContainsKey($_) -and ($Right[$_])) {
            New-Result $_ $Right[$_]
        } 
    }
    return $Results 

Мне нужно выбрать значение $ Left для ключа CreationDate, но пока я не могу этого сделать.

1 Ответ

2 голосов
/ 06 мая 2019

это довольно по-домашнему, но работает.[ ухмылка ]

что он делает ...

  • перебирает ключи в новой версии таблицы
  • если ключ Status, обновите старую версию новым значением
  • , если ключ отсутствует в списке ключей в old версия, добавьте ее и ее значение

, поскольку хеш-таблицы передаются по ссылке, при необходимости вы можете поместить это в функцию.Я не уверен, что это имеет смысл, хотя.я бы, вероятно, поместил его в цикл для обработки элементов вашей коллекции.

код ...

$Original = @{
    Name = "Alex"
    CreationDate = "2018-10-20"
    Status = "Married"
    }
$Updated = @{
    CreationDate = "2019-03-15"
    Status = "Divorced"
    City = "NY"
    Country = "US"
    }

foreach ($Key in $Updated.Keys)
    {
    if ($Key -eq 'Status')
        {
        $Original[$Key] = $Updated[$Key]
        }
    if ($Key -notin $Original.Keys)
        {
        $Original.Add($Key, $Updated[$Key])
        }
    }

$Original

вывод ...

Name                           Value
----                           -----
CreationDate                   2018-10-20
Status                         Divorced
Name                           Alex
City                           NY
Country                        US
...