add new func Meet/MeetProb and alias N/Str/Digits/Letters for grand

This commit is contained in:
John
2019-01-14 20:12:44 +08:00
parent 302f3c1467
commit 1c72766c34
2 changed files with 35 additions and 28 deletions

View File

@ -12,15 +12,27 @@ var (
digits = []rune("0123456789")
)
// 随机计算是否满足给定的概率(分子/分母)
func Meet(num, total int) bool {
return Rand(0, total) <= num
}
// 随机计算是否满足给定的概率(float64)
func MeetProb(prob float64) bool {
return Rand(0, 1e17) <= int(prob*1e17)
}
// Rand 别名
func N (min, max int) int {
return Rand(min, max)
}
// 获得一个 min, max 之间的随机数(min <= x <= max)
func Rand (min, max int) int {
if min >= max {
return min
}
if min == 0 {
return intn(max + 1)
}
if min > 0 {
if min >= 0 {
// 数值往左平移,再使用底层随机方法获得随机数,随后将结果数值往右平移
return intn(max - (min - 0) + 1) + (min - 0)
}
@ -31,6 +43,11 @@ func Rand (min, max int) int {
return 0
}
// RandStr 别名
func Str(n int) string {
return RandStr(n)
}
// 获得指定长度的随机字符串(可能包含数字和字母)
func RandStr(n int) string {
b := make([]rune, n)
@ -44,6 +61,11 @@ func RandStr(n int) string {
return string(b)
}
// RandDigits 别名
func Digits(n int) string {
return RandDigits(n)
}
// 获得指定长度的随机数字字符串
func RandDigits(n int) string {
b := make([]rune, n)
@ -53,6 +75,11 @@ func RandDigits(n int) string {
return string(b)
}
// RandLetters 别名
func Letters(n int) string {
return RandLetters(n)
}
// 获得指定长度的随机字母字符串
func RandLetters(n int) string {
b := make([]rune, n)

View File

@ -2,31 +2,11 @@ package main
import (
"fmt"
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/util/gconv"
"gitee.com/johng/gf/g/util/grand"
)
func main() {
type Score struct {
Name string
Result int
}
type User struct {
Scores []*Score
}
user := new(User)
scores := map[string]interface{}{
"Scores" : map[string]interface{}{
"Name" : "john",
"Result" : 100,
},
}
// 嵌套struct转换属性为slice类型数值为map类型
if err := gconv.Struct(scores, user); err != nil {
fmt.Println(err)
} else {
g.Dump(user)
}
fmt.Println(float64(10)/3)
fmt.Println(grand.Meet(1, 1))
fmt.Println(grand.MeetProb(float64(1)/2))
}