切片或映射GAE Go中元素的重新排序或加扰顺序

我有一个代码,可以从数据存储中获取所有问题:


queQ := datastore.NewQuery("Question")

questions := make([]questionData, 0)

    if keys, err := queQ.GetAll(c, &questions); err != nil {

                http.Error(w, err.Error(), http.StatusInternalServerError)

                return

        }

我想一次但随机地显示这些问题。我想在go(server)中而不是在客户端中对问题片进行重新排序。怎么可能扰乱切片的顺序?我曾考虑过生成随机数,但是我认为有一种简单的方法可以做到这一点。非常感谢大家!


森林海
浏览 221回答 2
2回答

一只萌萌小番薯

在您的代码中,keys和questions是数据存储区键和值的同步切片。因此,请使用切片索引的随机序列进行访问questions。例如,要随机选择所有键和值片,package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "math/rand"&nbsp; &nbsp; "time")type Key struct{}type Value interface{}func main() {&nbsp; &nbsp; keys := make([]*Key, 5)&nbsp; &nbsp; values := make([]Value, len(keys))&nbsp; &nbsp; rand.Seed(time.Now().Unix())&nbsp; &nbsp; for _, r := range rand.Perm(len(keys)) {&nbsp; &nbsp; &nbsp; &nbsp; k := keys[r]&nbsp; &nbsp; &nbsp; &nbsp; v := values[r]&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(r, k, v)&nbsp; &nbsp; }}输出:2 <nil> <nil>3 <nil> <nil>4 <nil> <nil>0 <nil> <nil>1 <nil> <nil>该代码已被修改为使用rand.Perm函数。

喵喔喔

也许你可以使用包&nbsp;math/randrandomQuestion:=questions[rand.Intn(len(questions)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go