[英]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.