gpt4 book ai didi

arrays - 深拷贝一个数组

转载 作者:行者123 更新时间:2023-12-03 14:10:32 27 4
gpt4 key购买 nike

我一直在用头撞墙。
我知道如果我在 Powershell 中创建一个数组,然后复制该数组,它会将其复制为引用类型而不是值类型。
所以,经典的例子是:

$c = (0,0,0)
$d = $c
$c[0] = 1
$d
1
0
0

解决方案是做 $d = $c.clone()如果数组本身是引用类型的集合,则这不起作用。这是我的问题。我试图通过创建一个进程数组来创建一个数组来跟踪 CPU 使用率,稍等片刻,然后检查最新值并计算差异。但是,Get-Process 创建了一个引用数组。所以当我执行以下操作时:

$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get current values
$b = $a.clone() #Create a copy of those values.
sleep 20 #Wait a few seconds for general CPU usage...

$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get latest values.
$a[0]
$b[0] #returns the same value as A.

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessNam
------- ------ ----- ----- ----- ------ -- ----------
3195 57 90336 100136 600 83.71 7244 OUTLOOK

$a$b 将始终返回相同的值。如果我尝试使用 $b[0] = "$a[0].clone()"之类的方法一次输入一个条目 - PS 会提示在这种情况下无法使用 Clone。

有什么建议吗??

此外,仅供引用,实际上不需要第二行 $a = PS |.... 因为 $a 是 PS 列表对象的引用类型,它实际上得到更新并在调用 $a 时返回最新值。我将其包括在内是为了更清楚地说明我在这里要完成的任务。

最佳答案

要复制数组,您可以执行以下操作:

$c = (0,0,0)
$d = $c | foreach { $_ }
$c[0] = 1
"c is [$c]"
"d is [$d]"

结果

c is [1 0 0]
d is [0 0 0]

对于您的特定问题(比较进程的 CPU 使用率),正如 Keith 指出的那样,更具体的内容可能会更好。

关于arrays - 深拷贝一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481758/

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