如何创建一个可以计算列表中样本之间差异的脚本?

时间:2015-12-04 17:16:16

标签: powershell

我正在尝试创建一个可以计算列表中样本之间差异的脚本 如果我们采用这个例子:

 - result1 = 33
 - result2 = 45
 - result3 = 66
 - result4 = 47
 - result"n" = 50  

微积分应从列表的第二个结果开始,然后下降到最后一个结果,然后总结这些结果:

result2 - result1 = 12,  
result3 - result2 = 21,  
result4 - result3 = 19,    
result"n" - result4= 3  
sum = 12 + 21 + 19 + 3 = 55  

我是脚本新手,到目前为止我只提出了这个解决方案:

$numbers 
$1=[math]::abs($numbers[0]-$numbers[1])
$2=[math]::abs($numbers[1]-$numbers[2])
$3=[math]::abs($numbers[2]-$numbers[3])
$4=[math]::abs($numbers[3]-$numbers[4])
write-host "the results = $1, $2, $3, $4"
$sum = $1 + $2 + $3 + $4  

问题是列表是动态的并且长度发生变化,一次有10个结果,一次是20个例子。
我发现了类似的问题here,但我不知道如何为我的案例实施解决方案,因为这对我来说太复杂了。

2 个答案:

答案 0 :(得分:1)

您需要的是For循环。它的结构如下:

For(<initial declaration, usually a start point like $i = 0>; <Condition to stop when false>;<Action to perform on each iteration to progress loop>){
    Code to perform on each loop
}

对于你我们会做类似的事情:

For($i=1;$i -le $numbers.count;$i++)

从1开始,由于数组从0开始,这将使你进入第二条记录。然后在scriptblock中我们做了类似的事情:

{
    [array]$Results += [math]::abs($numbers[$i] - $numbers[($i-1)])
}

这将为您带来差异,然后显示它们您可以执行以下操作:

"the results = " + ($Results -join ", ")
$sum = $Results|Measure -sum|select -expand Sum

所以你把它们放在一起然后得到

For($i=1;$i -le $numbers.count;$i++){
    [array]$Results += [math]::abs($numbers[$i] - $numbers[($i-1)])
}
"the results = " + ($Results -join ", ")
$sum = $Results|Measure -sum|select -expand Sum

答案 1 :(得分:0)

使用for循环,使用$numbers数组的长度来知道何时停止。

$numbers = @(33,45,66,47,50)
$sum = 0
for($cur=1;$cur -lt $numbers.Length; $cur += 1){
    $sum += [math]::abs($numbers[$cur]-$numbers[$cur-1]);
}
$sum