📜  如何在 Golang 中生成唯一随机数数组?(1)

📅  最后修改于: 2023-12-03 14:52:18.322000             🧑  作者: Mango

如何在 Golang 中生成唯一随机数数组?

在 Golang 中,我们可以使用 math/rand 库生成随机数。然而,生成唯一的随机数数组可能需要我们进行一些额外的工作。

方法一:生成随机数并检查重复

可以使用以下步骤生成一个唯一的随机数数组:

  1. 导入必要的包和库:
import (
    "fmt"
    "math/rand"
    "time"
)
  1. 设置随机数种子:
rand.Seed(time.Now().UnixNano())
  1. 定义需要生成的数组大小和范围:
size := 10       // 数组大小
min := 1         // 随机数范围最小值
max := 100       // 随机数范围最大值
  1. 生成唯一随机数数组:
var arr []int
for len(arr) < size {
    num := rand.Intn(max-min+1) + min  // 生成随机数
    if !contains(arr, num) {           // 检查数组中是否已存在该数
        arr = append(arr, num)         // 唯一,添加到数组中
    }
}

func contains(arr []int, num int) bool {
    for _, a := range arr {
        if a == num {
            return true
        }
    }
    return false
}

这个方法通过不断生成随机数并检查是否已存在于数组中来确保唯一性。如果数组中不存在该随机数,将其添加到数组中。

方法二:使用 Fisher-Yates 算法

另一种生成唯一随机数数组的方法是使用 Fisher-Yates 算法。这个算法通过将数组随机排序来生成唯一的随机数数组。

  1. 导入包和库:
import (
    "fmt"
    "math/rand"
    "time"
)
  1. 设置随机数种子:
rand.Seed(time.Now().UnixNano())
  1. 定义需要生成的数组大小和范围:
size := 10       // 数组大小
min := 1         // 随机数范围最小值
max := 100       // 随机数范围最大值
  1. 生成唯一随机数数组:
arr := make([]int, size)
for i := 0; i < size; i++ {
    arr[i] = i + min
}

for i := size - 1; i > 0; i-- {
    j := rand.Intn(i + 1)
    arr[i], arr[j] = arr[j], arr[i]
}

这个方法使用了 Golang 中的 Fisher-Yates 算法实现。首先,我们初始化一个包含整数范围内所有可能值的数组,然后通过随机交换数组元素的位置来实现随机排序。

总结

以上介绍了两种在 Golang 中生成唯一随机数数组的方法。第一种方法通过不断生成随机数并检查是否已存在于数组中来保证唯一性。第二种方法使用了 Fisher-Yates 算法来生成随机数数组。

你可以根据具体需求选择适合的方法,生成唯一随机数数组。