我有一系列数字,有些是连续的,有些是间断的。以下是示例。
(1..10),12,15,(30..45),50,53
当我尝试查询“我的号码”是否在此列表中时 - 假设它在此4
- 所有检查都失败。
> 4 -in (1..10),12,15,(30..45),50,53
> False
> (1..10),12,15,(30..45),50,53 -contains 4
> False
> ((1..10),12,15,(30..45),50,53).contains(4)
> False
> (1..10),12,15,(30..45),50,53
> 1
2
3
4
etc...
我究竟做错了什么?
答案1
Powershell 使用逗号的默认行为是创建数组的数组:
(1..10),12,15,(30..45),50,53 | Foreach {$_ -join ' '}
1 2 3 4 5 6 7 8 9 10
12
15
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
50
53
4
不等于1 2 3 4...
,所以比较结果为假。
一种获取所需内容的简单方法是用$()
分号而不是逗号分隔列表元素,例如:
$((1..10);12;15;(30..45);50;53) -contains 4
True
类似的关键字包括展开或展平列表/数组
答案2
谢谢杰夫泽特林。解决方案是“扁平化”数组。就我而言,最简单、最兼容的方法是将输出传输到管道,write-output
然后检查。
> ((1..10),12,15,(30..45),50,53 | write-output) -contains 4
> True
答案3
有一个简单的语法可以将数组集合展平为一个数组:
4 -in @((1..10),12,15,(30..45),50,53 | ForEach-Object {$_})