golang - slice의 shuffle

Fisher–Yates shuffle 이라는 알고리즘 사용

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    n := 30
    arr := generate(n)

    fmt.Println(arr)
    shuffle(arr)
    fmt.Println(arr)
}

func generate(n int) []string {
    arr := make([]string, n)
    for i := range arr {
        arr[i] = fmt.Sprintf("%02d", i)
    }
    return arr
}

func shuffle(data []string) {
    n := len(data)
    for i := n - 1; i >= 0; i-- {
        j := rand.Intn(i + 1)
        data[i], data[j] = data[j], data[i]
    }
}

출처: https://qiita.com/sugyan/items/fd7138a756c1a409f5fd


이 글은 2018-11-01에 작성되었습니다.