我在下面有一个非常简单的用例,需要确定Array的某些元素是否存在。为什么在这种情况下条件运算符不起作用?
@("a", "b").Where{$_ -eq "a"} -eq $true
答案 0 :(得分:3)
.Where()
数组方法用作 filter (就像其cmdlet对应的Where-Object
)一样,因此它返回一个匹配元素的 subarray [1] ,而不是布尔值。
对于简单的相等性测试 [2] ,您可以改用布尔值-contains
operator:
('a', 'b') -contains 'a' # -> $true
如果您确实需要通过.Where()
通过基于脚本块的测试:
('a', 'b').Where({ $_ -in 'a', 'z' }, 'First').Count -ne 0
请注意'First'
参数,这是一项重要的优化,它使.Where()
在找到第一个匹配项后返回。
由于结果总是包装在数组 [1] 中,因此检查.Count
属性足以确定是否找到匹配项。
[1]从技术上讲,返回类型为[System.Collections.ObjectModel.Collection[psobject]]
的集合。
[2]请注意,PowerShell默认情况下不区分大小写 ,但是它提供了c
前缀的比较运算符版本,以区分大小写。例如-ccontains
,或等同于反转的等效操作数-in
operator,-cin
。