2013-02-17 11 views
2

元素扰为了我有一个获得所有问题,从数据存储代码:重新排列或切片或地图GAE转到

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(服务器)而不是客户端中对问题片进行重新排序。怎么可能搅乱切片的顺序?我曾想过产生ramdom数字,但我认为有一个简单的方法来做到这一点。非常感谢大家!

+0

[如何在数据存储区(AppEngine)中随机获取某些东西?](http://stackoverflow.com/questions/3450926/how-to-get-something-random-in-datastore-appengine) – 2013-02-17 16:04:56

回答

1

也许你可以使用包math/rand

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

在你的代码,keysquestions同步切片用于数据存储键和值。因此,请使用随机序列的切片索引来访问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功能。

+0

hi peterSO,我会试试这个!非常感谢! – sagit 2013-02-18 12:06:49

+1

参见[rand.Perm](http://golang.org/pkg/math/rand/#Rand.Perm) – Sonia 2013-02-18 16:04:11

+0

@Sonia:好的建议。完成。 – peterSO 2013-02-18 17:06:45