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