0

我最近问了一个关于如何根据对象百分比将项目插入数组的问题,如下所示。现在答案很简单,但我试过了,我将对象TestSubject的百分比设置为 3,并使用以下命令运行它:

if rand(100) <= TestSubject.percent
    arr.push(TestSubject.name)
end

但是 rand 为 54,百分比为 3,它总是有效 - 这不应该,总是有效,它应该只插入 3% 的时间,同样,如果百分比为 67,它应该插入 67% 的时间

然而,正如它所说,如果百分比小于或等于TestSubject.percent.

想法?

4

3 回答 3

0

您的代码看起来不错,并且确实有效:

require 'ostruct'

test_subject = OpenStruct.new(percent: 3, name: 'foo')
arr = []

100.times do
  if rand(100) <= test_subject.percent
    arr.push(test_subject.name)
  end
end

puts arr.size

示例输出:

5
4
1
2
3
0
5
3
0
2
3

您的问题位于其他地方。

于 2013-08-16T06:32:37.417 回答
0

如何将 rand(100) 设置为 rand_temp_variable,然后测试变量 <= TestSubject.percent ?这样你就可以调试/检查 rand_temp_variable 和 TestSubject.percent 的值,看看到底发生了什么。

于 2013-08-16T02:36:10.177 回答
0

我的猜测是您的 .percent 实际上是一个介于 0 和 1 之间的数字,例如 0.54,在这种情况下:

arr.push(TestSubject.name) if rand(100) < TestSubject.percent*100

[编辑]:您可以使用以下命令测试 rand 方法:

20.times do
  temp = rand(100)
  puts "Random Number: #{temp} <? #{3}\t#{temp < 3}"
end

对我来说,它返回的 True 值很少(如预期的那样)

于 2013-08-16T02:41:58.807 回答