1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add RandFromGivenSlice function (#235)

* feat: add RandFromGivenSlice function

* feat: add RandFromGivenSlice function
This commit is contained in:
残念
2024-08-14 19:36:12 +08:00
committed by GitHub
parent a360372aa9
commit 7b4e060f85
5 changed files with 105 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ import (
- [RandBytes](#RandBytes) - [RandBytes](#RandBytes)
- [RandInt](#RandInt) - [RandInt](#RandInt)
- [RandString](#RandString) - [RandString](#RandString)
- [RandFromGivenSlice](#RandFromGivenSlice)
- [RandUpper](#RandUpper) - [RandUpper](#RandUpper)
- [RandLower](#RandLower) - [RandLower](#RandLower)
- [RandNumeral](#RandNumeral) - [RandNumeral](#RandNumeral)
@@ -122,6 +123,33 @@ func main() {
} }
``` ```
### <span id="RandFromGivenSlice">RandFromGivenSlice</span>
<p>从给定切片中随机生成元素</p>
<b>函数签名:</b>
```go
func RandFromGivenSlice[T any](slice []T) T
```
<b>示例:<span style="float:right;display:inline-block;">[运行]()</span></b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/random"
)
func main() {
nicknames := []string{"张三", "李四", "王五", "赵六", "钱七"}
randElm := random.RandFromGivenSlice(nicknames)
fmt.Println(randElm)
}
```
### <span id="RandUpper">RandUpper</span> ### <span id="RandUpper">RandUpper</span>
<p>生成给定长度的随机大写字母字符串</p> <p>生成给定长度的随机大写字母字符串</p>

View File

@@ -121,6 +121,33 @@ func main() {
} }
``` ```
### <span id="RandFromGivenSlice">RandFromGivenSlice</span>
<p>Generate a random element from given slice.</p>
<b>Signature:</b>
```go
func RandFromGivenSlice[T any](slice []T) T
```
<b>Example:<span style="float:right;display:inline-block;">[Run]()</span></b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/random"
)
func main() {
randomSet := []any{"a", 8, "hello", true, 1.1}
randElm := random.RandFromGivenSlice(randomSet)
fmt.Println(randElm)
}
```
### <span id="RandUpper">RandUpper</span> ### <span id="RandUpper">RandUpper</span>
<p>Generate a random upper case string</p> <p>Generate a random upper case string</p>

View File

@@ -185,6 +185,15 @@ func RandStringSlice(charset string, sliceLen, strLen int) []string {
return result return result
} }
// RandFromGivenSlice generate a random element from given slice.
func RandFromGivenSlice[T any](slice []T) T {
if len(slice) == 0 {
var zero T
return zero
}
return slice[rand.Intn(len(slice))]
}
// RandUpper generate a random upper case string of specified length. // RandUpper generate a random upper case string of specified length.
// Play: https://go.dev/play/p/29QfOh0DVuh // Play: https://go.dev/play/p/29QfOh0DVuh
func RandUpper(length int) string { func RandUpper(length int) string {

View File

@@ -43,6 +43,24 @@ func ExampleRandString() {
// 6 // 6
} }
func ExampleRandFromGivenSlice() {
goods := []string{"apple", "banana", "cherry", "elderberry", "fig", "grape", "honeydew", "kiwi", "lemon",
"mango", "nectarine", "orange"}
isInGoods := false
result := RandFromGivenSlice(goods)
for _, good := range goods {
if good == result {
isInGoods = true
break
}
}
fmt.Println(isInGoods)
// Output:
// true
}
func ExampleRandUpper() { func ExampleRandUpper() {
pattern := `^[A-Z]+$` pattern := `^[A-Z]+$`
reg := regexp.MustCompile(pattern) reg := regexp.MustCompile(pattern)

View File

@@ -269,6 +269,29 @@ func TestRandStringSlice(t *testing.T) {
// }) // })
} }
func TestRandFromGivenSlice(t *testing.T) {
t.Parallel()
assert := internal.NewAssert(t, "TestRandFromGivenSlice")
randomSet := []any{"a", 8, "王", true, 1.1}
result := RandFromGivenSlice(randomSet)
find := false
for _, v := range randomSet {
if v == result {
find = true
}
}
assert.Equal(true, find)
emptyAnyRandomSet := []any{}
emptyAnyResult := RandFromGivenSlice(emptyAnyRandomSet)
assert.IsNil(emptyAnyResult)
emptyIntRandomSet := []int{}
emtpyIntResult := RandFromGivenSlice(emptyIntRandomSet)
assert.Equal(0, emtpyIntResult)
}
func TestRandBool(t *testing.T) { func TestRandBool(t *testing.T) {
t.Parallel() t.Parallel()
assert := internal.NewAssert(t, "TestRandBool") assert := internal.NewAssert(t, "TestRandBool")