Exercises/Core/core-deep-merge/solution.ps1
|
function Merge-Hashtable { [OutputType([hashtable])] param( [Parameter(Mandatory)] [hashtable]$Base, [Parameter(Mandatory)] [hashtable]$Override ) $result = @{} foreach ($key in $Base.Keys) { $value = $Base[$key] if ($value -is [hashtable]) { $result[$key] = Merge-Hashtable -Base $value -Override @{} } else { $result[$key] = $value # assign inside the branch: $x = if (...) { $array } would unroll it } } foreach ($key in $Override.Keys) { $value = $Override[$key] if ($value -is [hashtable] -and $result[$key] -is [hashtable]) { $result[$key] = Merge-Hashtable -Base $result[$key] -Override $value } elseif ($value -is [hashtable]) { $result[$key] = Merge-Hashtable -Base $value -Override @{} } else { $result[$key] = $value } } $result } |