如何通过大于10的间隙分离不连续的整数序列?

时间:2013-12-25 19:00:52

标签: powershell sequence

在Powershell中:如何通过大于10的间隙分离排序的不连续整数序列?为了更好地说明,我设置了一个快速的Excel表格,它解释了几乎所有内容:

enter image description here

我当前的尴尬代码

$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

问题:这可以通过更简单的方式完成吗?我觉得我过于复杂了。

2 个答案:

答案 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 = $_
}