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抽奖算法,因为逻辑简单不复杂,所以代码也很简洁,可以做到不同权重有不用的中奖概...