У меня есть Powershell скрипт, в котором я делаю следующееDeep Копирование PSObject
$somePSObjectHashtables = New-Object Hashtable[] $somePSObject.Length;
$somePSObjects = Import-CSV $csvPath
0..($somePSObject.Length - 1) | ForEach-Object {
$i = $_;
$somePSObjectHashtables[$i] = @{};
$somePSObject[$_].PSObject.Properties | ForEach-Object {
$somePSObjectHashtables[$i][$_.Name] = $_.Value;
}
}
мне нужно сделать это, потому что я хочу сделать несколько различных копий данных в CSV для выполнения нескольких различных манипуляций. В некотором смысле я выполняю «INNER JOIN» в результирующем массиве PSObject. Я могу легко выполнить итерацию через $somePSObjectHashtables
с помощью ForEach-Object и вызвать Hashtable.Clone() на каждый элемент массива. Затем я смогу использовать New-Object PSObject -Property $someHashTable[$i]
, чтобы получить глубокую копию объекта PSObject.
Мой вопрос: есть ли более простой способ сделать глубокую копию без посредника Hashtable?
Это, вероятно, как я бы в конечном итоге решение такой вопрос. –
Просто, чтобы быть уверенным в терминах. 'Hashtable.Clone()' делает мелкие копии. Мы говорим о глубоких копиях или нет? –
Ну, в этом конкретном случае, когда данные поступают из CSV, это будет * на самом деле * глубоким, потому что свойства - это либо типы значений (глубоко скопированные, действительно), либо строки (не глубокие скопированные, но они неизменяемы, поэтому мы можем рассмотреть они * глубоко скопированы * в этом смысле). –