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

在Go中随机播放数组

在Go中随机播放数组

Go
守着一只汪 2021-05-12 10:14:43
我试图将以下Python代码转换为Goimport randomlist = [i for i in range(1, 25)]random.shuffle(list)print(list)但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。什么是我的代码的惯用Go版本?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

由于列表只是1到25之间的整数,因此可以使用Perm:


list := rand.Perm(25)

for i, _ := range list {

    list[i]++

}

请注意,使用由给定的置换rand.Perm是对任何数组进行混洗的有效方法。


dest := make([]int, len(src))

perm := rand.Perm(len(src))

for i, v := range perm {

    dest[v] = src[i]

}


查看完整回答
反对 回复 2021-05-17
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

也可以在不分配任何其他分片的情况下进行洗牌。


for i := range slice {

    j := rand.Intn(i + 1)

    slice[i], slice[j] = slice[j], slice[i]

}

有关算法的更多详细信息,请参见此Wikipedia文章rand.Perm实际上也在内部使用此算法。


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

添加回答

举报

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