github.com/nsqio/nsq@v1.3.0/internal/util/rand.go (about)

     1  package util
     2  
     3  import (
     4  	"math/rand"
     5  )
     6  
     7  func UniqRands(quantity int, maxval int) []int {
     8  	if maxval < quantity {
     9  		quantity = maxval
    10  	}
    11  
    12  	intSlice := make([]int, maxval)
    13  	for i := 0; i < maxval; i++ {
    14  		intSlice[i] = i
    15  	}
    16  
    17  	for i := 0; i < quantity; i++ {
    18  		j := rand.Int()%maxval + i
    19  		// swap
    20  		intSlice[i], intSlice[j] = intSlice[j], intSlice[i]
    21  		maxval--
    22  
    23  	}
    24  	return intSlice[0:quantity]
    25  }