在Go中随机播放数组

我试图将以下Python代码转换为Go


import random


list = [i for i in range(1, 25)]

random.shuffle(list)

print(list)

但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。


什么是我的代码的惯用Go版本?


守着一只汪
浏览 256回答 3
3回答

富国沪深

由于列表只是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]}

小怪兽爱吃肉

也可以在不分配任何其他分片的情况下进行洗牌。for i := range slice {    j := rand.Intn(i + 1)    slice[i], slice[j] = slice[j], slice[i]}有关该算法的更多详细信息,请参见此Wikipedia文章。rand.Perm实际上也在内部使用此算法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go