在golang中获取未定义的rand.Shuffle

use*_*591 2 shuffle undefined go slice

所以我有一封信,想将它们洗牌。我已经实现了以下代码片段:

rand.Shuffle(len(letters), func(i, j int) {
    letters[i], letters[j] = letters[j], letters[i]
)}
Run Code Online (Sandbox Code Playgroud)

运行程序时,它停留在第一行,上面写着:“ undefined:rand.Shuffle”。在我的导入声明中,我已经导入了“ math / rand”,并且在有问题的代码段之前也运行了此代码段:

rand.Seed(seed)
Run Code Online (Sandbox Code Playgroud)

在代码前面给出“种子”的位置。

另外,我想要的是随机排列一个单词,但不要触摸第一个和最后一个字母。是否有一个简单的解决方案。我写了这样的代码:

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] 
    }
})
Run Code Online (Sandbox Code Playgroud)

完整代码:

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
Run Code Online (Sandbox Code Playgroud)

}

pet*_*rSO 6

Go 1.10发行说明(2018年2月)

对库的较小更改

数学/兰德

新的随机播放功能和相应的Rand.Shuffle方法可随机播放输入序列。


对于该rand.Shuffle功能,您至少需要Go 1.10。

运行go version以检查您的版本。