簡體   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