为什么比较运算符在枚举后不起作用?

时间:2020-10-16 19:26:19

标签: powershell comparison

我在下面有一个非常简单的用例,需要确定Array的某些元素是否存在。为什么在这种情况下条件运算符不起作用?

@("a", "b").Where{$_ -eq "a"} -eq $true

1 个答案:

答案 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

相关问题