我试图根据Powershell中的可变百分比随机更改数组。 不幸的是我没有得到预期的输出。 在下面的脚本中,我尝试根据随机生成的输出更改数组的20%。
有人知道做到这一点的最佳方法吗?
$row = 4
$col = 2
$temp_array = New-Object 'object[,]' $row,$col
for ($i=0;$i -le $row -1 ; $i++) {
for ($j=0;$j -le $col -1 ; $j++) {
$temp_array[$i,$j] = Get-Random -Minimum 1 -Maximum 10
}
}
$perc_to_change = 0.2
for ($i=0;$i -le $row -1 ; $i++) {
for ($j=0;$j -le $col -1 ; $j++) {
$check_digit = Get-Random -Maximum 1 -Minimum 0.0
If($check_digit -lt $perc_to_change){
$temp_array[$i,$j] = "changed"
}
Write-Host "temp array [" $i "][" $j "] = " $temp_array[$i,$j]
}
}
答案 0 :(得分:0)
IMO,您需要一种不同的方法来获得随机百分比分布在行和列上。
唯一编号的行和列
C0 C1 C2 C3 C4 R0 0 1 2 3 4 R1 5 6 7 8 9 R2 10 11 12 13 14 R3 15 16 17 18 19 R4 20 21 22 23 24
此脚本使用Get-Random -Count
从$ rows与$ cols的乘积中选择百分比,迭代结果并重新计算行和列。
## Q:\Test\2018\10\23\SO_52949282.ps1
$row = 5
$col = 5
$temp_array = New-Object 'object[,]' $row,$col
for ($i=0;$i -le $row -1 ; $i++) {
for ($j=0;$j -le $col -1 ; $j++) {
$temp_array[$i,$j] = Get-Random -Minimum 1 -Maximum 10
}
}
$elements = $row * $col
$Count = [Math]::Floor($elements * 0.2)
0..$($elements-1) | Get-Random -Count $count | ForEach-Object {
"{0,2} = [{1},{2}]" -f $_,[Math]::Floor($_/$col),($_ % $col )
}
如何处理所产生的百分比,我会留给您。
样本输出(5 * 5的20%为5):
6 = [1,1]
11 = [2,1]
16 = [3,1]
9 = [1,4]
19 = [3,4]
答案 1 :(得分:0)
为了更好地匹配您的exactly 20%
请求,请看一下...
$TargetPct = 20
$ValueRange = @(20, 40, 60, 80, 100)
$Results = 1..100 |
ForEach-Object {
Get-Random -InputObject $ValueRange
}
($Results -eq $TargetPct).Count
上面显示的计数始终接近100的理想20%。我运行了几次代码,“精确20”的计数范围为17到23。
使用-InputObject
参数绕过-Max
参数为您提供的“相差一”。
-Min 10 -Max 20
>>> 10..19 -InputObject (10..20)
>>> 10..20