Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell克隆有序哈希表_Powershell_Hashtable - Fatal编程技术网

Powershell克隆有序哈希表

Powershell克隆有序哈希表,powershell,hashtable,Powershell,Hashtable,跟进 问题 无法克隆有序哈希表 问题: 有没有“简单”的方法可以做到这一点?我确实发现,对于这样一项“简单”的任务,有些例子似乎过于复杂 MWE 输出 方法调用失败,因为[System.Collections.Specialized.OrderedDictionary]不包含名为“Clone”的方法。不包含方法(另请参见IClonable接口)。您必须手动执行此操作: $ordered = [ordered]@{a=1;b=2;c=3;d=4} $ordered2 = [ordered]@{}

跟进

问题 无法克隆有序哈希表

问题: 有没有“简单”的方法可以做到这一点?我确实发现,对于这样一项“简单”的任务,有些例子似乎过于复杂

MWE 输出
方法调用失败,因为[System.Collections.Specialized.OrderedDictionary]不包含名为“Clone”的方法。
不包含方法(另请参见IClonable接口)。您必须手动执行此操作:

$ordered = [ordered]@{a=1;b=2;c=3;d=4}
$ordered2 = [ordered]@{}
foreach ($pair in $ordered.GetEnumerator()) { $ordered2[$pair.Key] = $pair.Value }

虽然PawełDyl给出的答案确实克隆了有序散列,但它不是一个简单的问题

为此,您需要执行以下操作:

# create a deep-clone of an object
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $ordered)
$ms.Position = 0
$clone = $bf.Deserialize($ms)
$ms.Close()

如果您希望丢失它的有序方面,一个快速的解决方案可能是转换为普通哈希表并使用其Clone()方法

$b=([hashtable]$a).Clone()
# create a deep-clone of an object
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $ordered)
$ms.Position = 0
$clone = $bf.Deserialize($ms)
$ms.Close()