【问题标题】:Reorder or Scrambling order of elements in slice or map GAE Go对切​​片或映射中的元素重新排序或加扰顺序 GAE Go
【发布时间】:2013-02-17 16:01:21
【问题描述】:

我有一个从数据存储区获取所有问题的代码:

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) 中而不是在客户端中对问题切片进行重新排序。怎么可能打乱切片的顺序?我曾想过生成随机数,但我认为有一种简单的方法可以做到这一点。非常感谢大家!

【问题讨论】:

标签: google-app-engine maps go slice


【解决方案1】:

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

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 函数。

【讨论】:

  • 嗨 peterSO,我会试一试!非常感谢!
  • @Sonia:好建议。完成。
【解决方案2】:

也许你可以使用包math/rand

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

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多