Quick actions

cmd+k|ctrl+k

Navigation

Languages

Randomize Strings

Snippet info

Language

Go

Visibility

public

Author

xealgo

Created

2018-06-13T06:11:42Z

Updated

2018-06-13T06:11:42Z

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func debug(list []string, randFn func([]string) []string) {
    t := time.Now()
    
    out := randFn(list)
        
	// debugging stuff
	d := time.Since(t) 
	ns := d.Seconds()
	
	for _, v := range out {
		fmt.Println(v)
	}
	
	fmt.Println("--------------------------")
	fmt.Printf("took %fms to run\n", ns*1e3) // milliseconds
	fmt.Println("--------------------------")
}

func randomize(list []string) []string {
    ln := len(list)
    
    // size hinting greatly improves map insert performance
	randomized := make(map[int]int, ln)
	
	// randomize the list...
	for i := 0; i < ln; i++ {
	    r := rand.Intn(ln)
		_, ok := randomized[r]; 
		for ok {
		    r = rand.Intn(ln)
		    _, ok = randomized[r]
		}
		randomized[r] = r
	}
	
	// pull the map values out into a slice...
	out := []string{}
	for _, v := range randomized {
		out = append(out, list[v])
	}
	return out
}

func main() {
	rand.Seed(time.Now().UnixNano())
	available_ads := []string{"capital one", "ford", "mcdonalds", "zappos"}
	
	debug(available_ads, randomize)
    debug(available_ads, randomize)
    debug(available_ads, randomize)
    debug(available_ads, randomize)
}
INFO