golang 洗牌算法

xmge · · 558 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

洗牌算法:产生一个随机序列 ```go package main import ( "fmt" "math/rand" "time" ) func main() { fmt.Println(Shuffle([]int{10,20,30,40})) } func Shuffle(vals []int) []int { newVals := make([]int,0,len(vals)) r := rand.New(rand.NewSource(time.Now().Unix())) for _,i := range r.Perm(len(vals)) { newVals = append(newVals, vals[i]) } return newVals } ``` 关键步骤:r.Perm(),解释: ```go // Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n). func (r *Rand) Perm(n int) []int { m := make([]int, n) // In the following loop, the iteration when i=0 always swaps m[0] with m[0]. // A change to remove this useless iteration is to assign 1 to i in the init // statement. But Perm also effects r. Making this change will affect // the final state of r. So this change can't be made for compatibility // reasons for Go 1. for i := 0; i < n; i++ { j := r.Intn(i + 1) m[i] = m[j] m[j] = i } return m } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

558 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传