PowerShell';s等效于LINQ All,或者如何验证集合中的所有项是否等于特定值?
我有一个项目集合,我根据正则表达式匹配生成,如下所示:PowerShell';s等效于LINQ All,或者如何验证集合中的所有项是否等于特定值?,linq,powershell,Linq,Powershell,我有一个项目集合,我根据正则表达式匹配生成,如下所示: $collection = $input | foreach { if ($_ -match $regex) {$matches} else { return } } | Select-Object –Property @{name='command'; expression={$_.command} }, @{name='id'; expression={$_.i
$collection = $input | foreach {
if ($_ -match $regex) {$matches} else { return }
} |
Select-Object –Property @{name='command'; expression={$_.command} },
@{name='id'; expression={$_.id} }
(很抱歉,如果这不是最好的方法,我正在学习PowerShell:)
我要做的是确保此$collection
中的所有命令
属性都等于同一个命令,例如“myCommand”
,我如何才能做到这一点
如果这是C#,我可能会这样做:
if (collection.All(item => item.Key == "myCommand")) { ... }
在PowerShell中执行此操作的惯用方法是什么?有人向我指出了这一点,这使我可以简单地执行以下操作:
$collection | Linq-All { $_.command -eq "myCommand" }
这正是我所需要的!更多示例。当数组中的所有项相等时,以下代码段返回
$true
。它所做的是:
$false
,否则$true
将代码段应用于数组@(1,1,1,1,1,2)将返回$false
,因为最后一个项目
@(1,1,1,1,1,2) |
ForEach-Object -Begin { $last = $null; $result = $true } {
if ($last -ne $null -and $result -and (Compare-Object $last $_) -ne $null) {
$result = $false
}
$last = $_
} -End { $result }
所有相同的(无论命令是什么)或所有等同于给定的命令?@AndreyShchekin后者。我更新了标题,谢谢!我的第一个想法是
($collection |?{$\.command-ne'myCommand'}).Length-eq 0
,但这有点笨重,我会想得更多。