当前位置:首页 > 编程笔记 > 正文
已解决

Golang洗牌算法(Golang乱序算法)

来自网友在路上 147847提问 提问时间:2023-10-25 18:45:09阅读次数: 47

最佳答案 问答题库478位专家为你答疑解惑

Golang 洗牌算法(乱序算法);需求背景:从一个文件下下读取所有文件,获取他们的名字, 将名字乱序排序,按着乱序后的序列,通过名字去找到文件,再上传,以达到上传文件的序列据原始序列相比是乱序的。

package srcimport ("fmt""io/ioutil""math/rand""os""time"
)// Shuffle ...
// @Description:洗牌算法(乱序算法);需求背景:从一个文件下下读取所有文件,获取他们的名字,
// 将名字乱序排序,按着乱序后的序列,通过名字去找到文件,再上传,以达到上传文件的序列据原始序列相比是乱序的。
func Shuffle() {var testFunc1 = func() {dir, err := os.ReadDir("D:\\sorttest")if err != nil {fmt.Println(err)}var total = len(dir)var originOrder = make([]string, total)var shuffledOrder = make([]string, total)for i, info := range dir {originOrder[i] = info.Name()}fmt.Println("originOrder:\n", originOrder)fmt.Println("--------- start shuffle  Func1 【 Fisher-Yates Shuffle 】  ----------")rand.Seed(time.Now().UnixNano())var shuffleFunc1 = func() {for i := total; i > 0; i-- {j := rand.Intn(i)shuffledOrder[i-1] = originOrder[j]                          // 将随机下标对应的数值取出 倒插进新数组中originOrder = append(originOrder[0:j], originOrder[j+1:]...) // 删除已经取出的值,不删的话 再次随机到此下标 会 取到相同的值//fmt.Println("------processing----\n", shuffledOrder)}}shuffleFunc1()fmt.Println("originOrder:\n", originOrder)fmt.Println("shuffledOrder:\n", shuffledOrder)}var testFunc2 = func() {dir, err := ioutil.ReadDir("D:\\sorttest")if err != nil {fmt.Println(err)}var total = len(dir)var originOrder = make([]string, total)for i, info := range dir {originOrder[i] = info.Name()}fmt.Println("originOrder:\n", originOrder)fmt.Println("-------- start shuffle  Func2  【 Knuth-Durstenfeld Shuffle 】---------")rand.Seed(time.Now().UnixNano())var shuffleFunc2 = func() {for i := total - 1; i > 0; i-- {j := rand.Intn(i)originOrder[i], originOrder[j] = originOrder[j], originOrder[i]}}shuffleFunc2()fmt.Println("shuffledOrder:\n", originOrder)}testFunc1()fmt.Println("\n\n\n=================\n\n\n")testFunc2()
}

originOrder:[0.json 1.json 10.json 11.json 12.json 13.json 14.json 2.json 3.json 4.json 5.j
son 6.json 7.json 8.json 9.json]
--------- start shuffle  Func1 【 Fisher-Yates Shuffle 】  ----------
originOrder:[]
shuffledOrder:[8.json 11.json 12.json 2.json 3.json 1.json 6.json 14.json 0.json 4.json 10.js
on 5.json 13.json 9.json 7.json]=================originOrder:[0.json 1.json 10.json 11.json 12.json 13.json 14.json 2.json 3.json 4.json 5.j
son 6.json 7.json 8.json 9.json]
-------- start shuffle  Func2  【 Knuth-Durstenfeld Shuffle 】---------
shuffledOrder:[2.json 14.json 7.json 10.json 4.json 8.json 11.json 5.json 12.json 0.json 1.js
on 3.json 13.json 9.json 6.json]
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Golang洗牌算法(Golang乱序算法)":http://eshow365.cn/6-24381-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!