繁体   English   中英

PS:用“ Where-Object”选择时,如何更改数组项的值?

[英]PS: How can i change a value of an item of an array when selected with 'Where-Object'?

我有一个这样的对象数组:

$arr1 = 1..40 |% {[pscustomobject]@{value=0;type="D";used=$false}}

[.. do something ..]

PS C:\Windows\system32> $arr1
                    value type                                                   used
                    ----- ----                                                   ----
                        1 H                                                      True
                        2 H                                                      True
                        3 H                                                      True
                        4 H                                                      True
                        5 H                                                      True
                        6 H                                                      True
                        7 H                                                      True
                        8 H                                                      True
                        9 H                                                      True
                       10 H                                                      True
                       11 H                                                     False
                       12 H                                                     False
                       13 H                                                     False
                        1 D                                                     False
                        2 D                                                     False

[...]

使用Where-Object我想在数组中选择一个特定的对象:

$arr1 | ? {$_.value -eq $newc.value -and $_.type -eq $newc.type}


                    value type                                                   used
                    ----- ----                                                   ----
                        6 C                                                      True

如您所见,带有""的选择效果很好,但是现在我想将此特定Object的$used标志设置为$false

我怎样才能做到这一点? 我有一个问题,我不知道我的"?-Clause"匹配的数组中的位置。 (对于“ position”,我的意思是$arr1[POSITION] 。我不知道该项目在数组中的编号)

我认为如果我使用for循环并检查我的条件是否匹配,每个$arr1[$i]可以。 但是我认为必须有一种更优雅的方法吗? 还是我真的需要for循环来检查数组中的每个项目?

这应该工作:

$toChange = $arr1 | ? {($_.value -eq $newc.value) -and ($_.type -eq $newc.type)}
$toChange | % { $_.used = $false }

使用Where-Object查询获取要更改的项目列表,然后使用Foreach-Object%遍历它们来进行更改。

或者,您可以一行完成:

$arr1 | ? {($_.value -eq $newc.value) -and ($_.type -eq $newc.type)} | % { $_.used = $false }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM