package main
import (
"fmt"
"math/rand"
"time"
)
// 奖品
type PrizeInfo struct {
PrizeId int // 奖品id
Weight int // 概率
}
func main() {
var list []PrizeInfo
list = []PrizeInfo{
{
PrizeId: 1,
Weight: 10,
},
{
PrizeId: 2,
Weight: 20,
},
{
PrizeId: 3,
Weight: 50,
},
{
PrizeId: 4,
Weight: 20,
},
}
m := make(map[int]int)
for i := 0; i < 1000; i++ {
prize := GetRandom(list)
m[prize.PrizeId] += 1
}
fmt.Println(m)
}
// 随机并返回抽中的奖品
func GetRandom(list []PrizeInfo) PrizeInfo {
if len(list) == 0 {
return PrizeInfo{}
}
total := 0
for _, v := range list {
total += v.Weight
}
rand.Seed(time.Now().UnixNano())
index := rand.Intn(total) // [0,99 )
current := 0
for _, v := range list {
current += v.Weight
if index < current {
return v
}
}
return PrizeInfo{}
}
output:
map[1:89 2:189 3:511 4:211]
golang抽奖随机代码
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 工作需要,这两天写一个简单的java抽奖算法,因为逻辑简单不复杂,所以代码也很简洁,可以做到不同权重有不用的中奖概...