从int数组的前30%中随机选择

时间:2014-04-26 01:15:55

标签: bash random

假设我有一个int数组

array=( 1 2 3 4 5 6 7 8 9 10 )

如何从数组的前30%中选择一个随机数,数字8,9或10。

我知道在数组中随机选择一个数字是:

${array[RANDOM % ${#array[@]}]}

但是我不知道如何在数组的百分比中选择一个随机元素,

2 个答案:

答案 0 :(得分:4)

  1. Sort the array,相反:

    IFS=$'\n' sorted=($(sort -rn <<<"${array[*]}"))
    
  2. 计算符合条件的元素数量:

    n=$((${#sorted[@]}*3/10))
    
  3. 选择一个随机元素:

    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]}

或者您是否看到任何错误?

编辑:我不得不绕地板而不是地板,因为地板轮有时候没有产生数字。