在Powershell中:如何通过大于10的间隙分离排序的不连续整数序列?为了更好地说明,我设置了一个快速的Excel表格,它解释了几乎所有内容:
我当前的尴尬代码
$input = @(108,109,111,112,276,278,282,300,515,516,517,523,527,
552,553,554,555,556,557,558,559,561,562,563,706)
$output = @()
for($i=0; $i -lt $input.count; $i++){
if ($input[$i] -le ($input[$i+1])-10 ) {
$output += $input[$i]
}
}
$output += $input[$input.count-1]
正确的示例输出为112,282,300,527,563,706
问题:这可以通过更简单的方式完成吗?我觉得我过于复杂了。
答案 0 :(得分:2)
我有这个:
$array = @(108,109,111,112,276,278,282,300,515,516,517,523,527,552,553,554,555,556,557,558,559,561,562,563,706)
0..($array.count -2) | foreach { @($array[$_]) -lt $array[$_ + 1] - 10 }
112
282
300
527
563
答案 1 :(得分:0)
这样的东西?不确定它是否更漂亮,但它更多的是PowerShell"。
请注意$input
是一个错误的变量名称,因为powershell已经使用它来作为枚举器访问整个管道流。
$arr = @(108,109,111,112,276,278,282,300,515,516,517,523,527,552,553,554,555,556,557,558,559,561,562,563,706)
$arr | ForEach-Object -Begin { $last = $arr[0] } -Process {
if(($_ - $last) -gt 10) {
$last
}
$last = $_
} -End { $arr[-1] }
输出:
112
282
300
527
563
706
或者:
$arr = @(108,109,111,112,276,278,282,300,515,516,517,523,527,552,553,554,555,556,557,558,559,561,562,563,706)
$arr | ForEach-Object -Begin { $last = $arr[0] } -Process {
if(($_ - $last) -gt 10) {
$last
if($_ -eq $arr[-1]) {
$_
}
}
$last = $_
}