为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
森林海 2021-05-05 13:01:57
我有一个代码,可以从数据存储中获取所有问题: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)中而不是在客户端中对问题片进行重新排序。怎么可能扰乱切片的顺序?我曾考虑过生成随机数,但是我认为有一种简单的方法可以做到这一点。非常感谢大家!
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

在您的代码中,keys和questions是数据存储区键和值的同步切片。因此,请使用切片索引的随机序列进行访问questions。例如,要随机选择所有键和值片,


package main


import (

    "fmt"

    "math/rand"

    "time"

)


type Key struct{}

type Value interface{}


func main() {

    keys := make([]*Key, 5)

    values := make([]Value, len(keys))

    rand.Seed(time.Now().Unix())

    for _, r := range rand.Perm(len(keys)) {

        k := keys[r]

        v := values[r]

        fmt.Println(r, k, v)

    }

}

输出:


2 <nil> <nil>

3 <nil> <nil>

4 <nil> <nil>

0 <nil> <nil>

1 <nil> <nil>

该代码已被修改为使用rand.Perm函数。


查看完整回答
反对 回复 2021-05-31
?
喵喔喔

TA贡献1735条经验 获得超5个赞

也许你可以使用包 math/rand

randomQuestion:=questions[rand.Intn(len(questions)]


查看完整回答
反对 回复 2021-05-31
  • 2 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信