我想在同一时间从列表中获取多个随机元素,但不需要每次都是相同的元素。
第二个问题是:我想从列表中获取uniq元素,例如,如果我得到08,则需要从列表中删除此代码并获取net随机排除08字符串。
这是我的实际代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// Won't work on the Playground since the time is frozen.
rand.Seed(time.Now().Unix())
reasons := []string{
"01","02","03","04", "05", "06", "07", "08", "09", "10",
}
n := rand.Int() % len(reasons)
n1 := rand.Int() % len(reasons)
n2 := rand.Int() % len(reasons)
fmt.Println("", reasons[n])
fmt.Println("", reasons[n1])
fmt.Println("", reasons[n2])
}
我的输出是:
07
02
06
每次都返回相同的输出,我想随机而独特
答案 0 :(得分:0)
要获得唯一答案,您只需从切片中删除现有答案即可。我已经敲了一些东西,使用一个函数。有更有效的方法可以做到这一点,但这很容易看出发生了什么。
func main() {
rand.Seed(time.Now().Unix())
reasons := []string{
"01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
}
n, reasons := getRandom(reasons)
n1, reasons := getRandom(reasons)
n2, reasons := getRandom(reasons)
fmt.Println("", n)
fmt.Println("", n1)
fmt.Println("", n2)
}
func getRandom(reasons []string) (string, []string) {
n := rand.Int() % len(reasons)
switch n {
case 0:
return reasons[0], reasons[1:]
case len(reasons) - 1:
return reasons[n], reasons[:n]
}
newSlice := []string{}
for i, item := range reasons {
if i != n {
newSlice = append(newSlice, item)
}
}
return reasons[n], newSlice
}