假设我有一个int数组
array=( 1 2 3 4 5 6 7 8 9 10 )
如何从数组的前30%中选择一个随机数,数字8,9或10。
我知道在数组中随机选择一个数字是:
${array[RANDOM % ${#array[@]}]}
但是我不知道如何在数组的百分比中选择一个随机元素,
答案 0 :(得分:4)
Sort the array,相反:
IFS=$'\n' sorted=($(sort -rn <<<"${array[*]}"))
计算符合条件的元素数量:
n=$((${#sorted[@]}*3/10))
选择一个随机元素:
val=${sorted[RANDOM % $n]}
答案 1 :(得分:1)
解决nneonneo的例子......
因此,如果我想做一些更有活力的事情,我可以这样做:
percentage=0.3
IFS=$'\n' sorted=($(sort -rn <<<"${array[*]}"))
s=$(bc <<< $percentage*${#array[@]})
round=${s/.*}
round_ceil=$((round+1))
val=${sorted[RANDOM % $round_ceil]}
或者您是否看到任何错误?
编辑:我不得不绕地板而不是地板,因为地板轮有时候没有产生数字。