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


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

    package src
    
    import (
    	"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()
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    
    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]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    音质和音色一样吗?
    光伏电池建模及温度光照的影响曲线MATLAB仿真
    论文阅读:BEVBert: Multimodal Map Pre-training for Language-guided Navigation
    自动化运维工具Ansible教程(二)【进阶篇】
    pycharm集成通义灵码
    Kubernetes中的探针机制
    趋势的转换,数字化转型的基本逻辑经历了怎样的变化?
    Python之staticmethod:让你的代码更简洁高效
    『现学现忘』Docker基础 — 27、Docker镜像的commit操作
    Navicat将视图结构导出为可运行SQL文件
  • 原文地址:https://blog.csdn.net/qq_37106501/article/details/134040677