gpt4 book ai didi

arrays - PowerShell完全复制数组

转载 作者:行者123 更新时间:2023-12-04 13:08:11 24 4
gpt4 key购买 nike

我正在尝试创建现有阵列的完整副本。每次我尝试这样做似乎都行不通。事实是,我正在修改新复制的数组中的对象名称,但在原始数组中它们也已更改。

下面的代码经过了高度简化,因为除了重命名对象名称之外,还有很多事情在发生,但是这证明了我的观点。

一些示例代码:

Function Get-Fruits {
Param (
$Fruits = @('Banana', 'Apple', 'Pear')
)
foreach ($F in $Fruits) {
[PSCustomObject]@{
Type = $F
}
}
}

$FruitsOriginal = Get-Fruits

Function Rename-ObjectName {
# Copy the array here
$FruitsNew = $FruitsOriginal # Not a true copy
$FruitsNew = $FruitsOriginal | % {$_} # Not a true copy
$FruitsNew = $FruitsOriginal.Clone() # Not a true copy

$FruitsNew | Get-Member | ? MemberType -EQ NoteProperty | % {

$Name = $_.Name

$FruitsNew | % {
$_ | Add-Member 'Tasty fruits' -NotePropertyValue $_.$Name
$_.PSObject.Properties.Remove($Name)
}
}
}

Rename-ObjectName

理想的结果是2个完全独立的数组。

$水果原始
Type
----
Banana
Apple
Pear

$水果新
Tasty fruits
------------
Banana
Apple
Pear

感谢您的帮助。

最佳答案

您可以使用序列化来深克隆您的阵列:

#Original data
$FruitsOriginal = Get-Fruits

# Serialize and Deserialize data using BinaryFormatter
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $FruitsOriginal)
$ms.Position = 0

#Deep copied data
$FruitsNew = $bf.Deserialize($ms)
$ms.Close()

关于arrays - PowerShell完全复制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com