当前位置: 首页 > 面试题库 >

如何在golang中获取随机数样本?

贺福
2023-03-14
问题内容

或者我必须使用简单的方法,例如:

var arr []int

for i := 0; i < 5; i++ {
    arr = append(arr, rand.Intn(100))
}

问题答案:

您所做的是干净,快速的。您可以改进的是预分配切片,并使用如下for.. range循环填充它:

s := make([]int, 5)
for i := range s {
    s[i] = rand.Intn(100)
}

math/rand封装还具有rand.Read()填充用随机字节切片功能。因此,如果您想[]byte用随机数据填充一个切片,这就是所有必要的工作:

s := make([]byte, 100)
rand.Read(s) // This never returns an error

另一个有趣的方法是利用rand.Rand成为一个io.Reader。这意味着它具有Read()一种[]byte用随机数据填充的方法。

结合encoding/binary软件包,您可以用随机数据“填充”变量。创建a
rand.Rand并将其binary.Read()作为源传递给函数,仅此而已。

它是这样的:

r := rand.New(rand.NewSource(time.Now().UnixNano()))

s := make([]int32, 5)
err := binary.Read(r, binary.BigEndian, &s)
if err != nil {
    panic(err)
}
fmt.Println(s)

输出:

[203443513 1611652563 -235795288 8294855 -802604260]

这足够“酷”,甚至可以填充结构,例如:

var point struct{ X, Y int16 }
err = binary.Read(r, binary.BigEndian, &point)
if err != nil {
    panic(err)
}
fmt.Printf("%+v", point)

输出:

{X:-15471 Y:2619}

在Go Playground上尝试这些示例。

使用的一个障碍binary.Read()是-可以理解-
它只能填充固定大小类型的值,最著名的例外是普通int类型,其大小不固定(取决于体系结构)。因此,您无法[]int使用int类型字段填充切片或结构。这就是为什么我在上面的示例中使用int32int16类型。

当然,在这些解决方案中,您不能限制用于填充变量的随机数的范围。为此,初始循环仍然更容易。



 类似资料:
  • 问题内容: 我正在使用大型词典,由于某种原因,我还需要处理该词典中的少量随机样本。如何获得这个小样本(例如长度为2的样本)? 这是一个玩具模型: 我需要对dy执行一些涉及所有条目的任务。让我们说,为了简化,我需要将所有值加起来: 现在,我还需要对dy的随机样本执行相同的任务;为此,我需要dy键的随机样本。我能想到的简单解决方案是 这样,我就有了字典的两个键的列表,它们是随机的。因此,回到may任务

  • 问题内容: 我正在使用SQL Server 2005,请告诉我如何为表中的每一行获取6位(唯一数字,应该是随机的)值。 我在表中有一个字段,我需要6位数字值(随机且唯一)。 请帮助我做到这一点。 问题答案: 电话号码: 在SQL Server中,NEWID几乎是随机的。 但是,如果要唯一,则最好从000000开始,然后转到999999。任何随机数生成器都会遇到生日问题。 您可以拥有可靠的唯一身份或

  • 问题内容: 我有一个数组叫做 我需要从该数组中获取一个随机值并将其存储在变量中,我该怎么做? 问题答案: 您还可以执行以下操作: 当您有关联数组时,这就是这样做的方法。

  • 标准< code>rand()函数给出的数字对我来说不够大:我需要< code>unsigned long long的数字。我们如何得到非常大的随机数?我试着修改一个简单的散列函数,但是它太大,运行时间太长,而且从来不会产生小于1e5的数字!!

  • 问题内容: 我试图为我在1到60之间选择的每一行生成一个随机整数作为计时器。 我已经搜索并继续使用此FLOOR函数作为如何在范围内选择随机整数。这给我每一行1。我想念什么? 我在mysql 5.0.75上 我相信这是查询的其余部分,这可能是一个嵌套问题 问题答案: 这对我有用。您的mysql版本可能是?

  • 从数组中随机返回一个元素。 使用 Math.random() 生成一个随机数,乘以 length,并使用 Math.floor() 舍去小数获得到最接近的整数。这个方法也适用于字符串。 const sample = arr => arr[Math.floor(Math.random() * arr.length)]; sample([3, 7, 9, 11]); // 9