c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang怎样生成不重复随机数

更新时间:2024-01-05

生成不重复的随机数的概述

在使用 Golang 生成不重复的随机数时,可以借助其内置的rand包使用伪随机算法。然而,由于伪随机数发生器的性质,不同的运行环境可能会产生相同的随机数序列。为了生成真正不重复的随机数,我们可以使用一些额外的方法。

生成不重复的随机数方法

一种简单而有效的方式是使用一个哈希集合(map)来存储已经生成的随机数。每次生成一个新的随机数,我们首先检查它是否已经存在于集合中,如果存在,则重新生成直到得到一个不重复的随机数。

package main

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

func generateUniqueRandomNumbers(n int, min int, max int) []int {
    // 设置随机数种子
    rand.Seed(time.Now().UTC().UnixNano())

    // 使用 map 存储随机数
    numbers := make(map[int]bool)

    // 生成不重复的随机数
    for len(numbers) < n {
        num := rand.Intn(max-min+1) + min
        // 判断该随机数是否已存在
        if !numbers[num] {
            numbers[num] = true
        }
    }

    // 将随机数存储在切片中
    result := make([]int, 0)
    for num := range numbers {
        result = append(result, num)
    }

    return result
}

func main() {
    // 生成 10 个范围在 1 到 100 的不重复随机数
    numbers := generateUniqueRandomNumbers(10, 1, 100)
    fmt.Println(numbers)
}

在上述代码中,我们先设置随机数种子为当前时间戳,以确保每次运行程序时都会得到不同的随机数序列。然后,我们使用一个循环来生成指定数量的不重复随机数,并将其存储在一个集合(map)中。最后,将集合中的随机数转移到切片中并返回。

总结

通过使用哈希集合来存储已生成的随机数,我们可以生成不重复的随机数序列。这种方法不仅简单易懂,而且可以适用于任何需要生成不重复随机数的场景。记得在使用随机数之前,一定要设置好随机数种子,以确保每次生成的随机数都不同。