我最近问了一个关于如何根据显示here的对象百分比将项插入数组的问题。现在答案很简单,但我尝试了,我将对象TestSubject
的百分比设置为3,并使用以下命令运行:
if rand(100) <= TestSubject.percent
arr.push(TestSubject.name)
end
但是rand为54且百分比为3,它始终有效 - 这不应该,总是工作,它应该仅插入3%的时间,同样使用,如果百分比为67,则应插入67%的时间。
然而,如果百分比小于或等于TestSubject.percent
,它似乎就是这样做的。
想法?
答案 0 :(得分:0)
如何将rand(100)设置为rand_temp_variable,然后测试变量&lt; = TestSubject.percent? 这样你就可以调试/检查rand_temp_variable和TestSubject.percent的值,看看究竟发生了什么。
答案 1 :(得分: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值非常少(正如预期的那样)
答案 2 :(得分: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
您的问题位于其他地方。