mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
add new func Meet/MeetProb and alias N/Str/Digits/Letters for grand
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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))
|
||||
}
|
||||
Reference in New Issue
Block a user