我正在尝试创建一个可以计算列表中样本之间差异的脚本 如果我们采用这个例子:
- 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,但我不知道如何为我的案例实施解决方案,因为这对我来说太复杂了。
答案 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