go - 在 golang 中获取未定义的 rand.Shuffle
问题描述
所以我有一片字母,想把它们洗牌。我已经实现了这个代码片段:
rand.Shuffle(len(letters), func(i, j int) {
letters[i], letters[j] = letters[j], letters[i]
)}
运行程序时,它卡在第一行说:“未定义:rand.Shuffle”。在我的导入声明中,我已经导入了“math/rand”,我还在有问题的代码段之前运行了这个代码段:
rand.Seed(seed)
其中“种子”在代码前面给出。
另外我想要的是随机播放一个单词,但不要触摸第一个和最后一个字母。有没有简单的解决方案。我写了这样的代码:
rand.Shuffle(len(letters), func(i, j int) {
if i > 0 && i < (len(letters) - 1) && j > 0 && j < (len(letters) - 1){
letters[i], letters[j] = letters[j], letters[i]
}
})
完整代码:
import (
"math/rand"
"strings"
"regexp"
)
func splitText(text string) []string {
re := regexp.MustCompile("[A-Za-z0-9']+|[':;?().,!\\ ]")
return re.FindAllString(text, -1)
}
func scramble(text string, seed int64) string {
token := splitText(text)
rand.Seed(seed)
if len(token) != 0{
for i := 0; i < len(token); i++{
word := token[i]
if len(word) > 3{
letters := strings.Split(word, "")
rand.Shuffle(len(letters), func(i, j int) {
if i > 0 && i < (len(letters) - 1) && j > 0 && j < (len(letters) - 1){
letters[i], letters[j] = letters[j], letters[i]
}
})
token[i] = strings.Join(letters, "")
}
}
}
returnString := strings.Join(token, "")
return returnString
}
解决方案
Go 1.10 发行说明(2018 年 2 月)
库的小改动
数学/兰特
新的 Shuffle 函数和相应的 Rand.Shuffle 方法对输入序列进行随机播放。
对于该rand.Shuffle
功能,您至少需要 Go 1.10。
运行go version
以检查您的版本。
推荐阅读
- php - 可以在 webhost 上的 php 中使用命令行吗?
- javascript - 未添加 JQgrid 行
- mysql - 使用 mysql 查询提取字符串的某些部分
- android - 当弹出窗口处于活动状态时,使屏幕变暗,期望选定的视图
- javascript - 如何在允许 Promise 挂起的同时创建待处理的请求列表?
- java - 使用 docx4j 转换 docx 中的 AltChunks
- javascript - 穿透 Z-index
- javascript - Highcharts:跨多个图表同步轴刻度
- python - 计算数组中所有点与二维中另一个点之间的距离
- excel - 在 selenium 中跨多张 Excel 执行数据