我正试图让我的网站上的横幅图片每天更换一次。我可以看到ruby有srand
,它允许我为日期输入一个数字,并在每次在同一天调用时返回相同的结果,但这会返回一个非常长的数字。我也看到rand让我使用像rand(a..b)
这样的范围。
我有什么方法可以使用范围像范围一样使用兰德?
答案 0 :(得分:2)
您可以使用您喜欢的任何种子值创建一个特殊/指定的随机数生成器:
special = Random.new 42 # create a new instance of Random seeded with 42
20.times { p special.rand(5..10) } # generate 20 random ints in range 5 to 10
special
Random
srand
实例独立于kernel#rand
,除非您使用document.documentURI
使用相同的种子值对其进行初始化。
答案 1 :(得分:0)
为了避免在我的应用程序的其余部分中破坏随机数生成器,我选择了
(Date.today.to_s.gsub('-','').to_i) % number_of_banners
虽然不完全随机,但对于这种情况应该足够好,但我会对更好的解决方案感兴趣。
答案 2 :(得分:0)
您可以使用日期' s Julian day number作为种子:
require 'date'
Date.new(2017, 6, 1).jd #=> 2457906
Date.new(2017, 6, 2).jd #=> 2457907
Date.new(2017, 6, 3).jd #=> 2457908
然后可以使用它来生成随机每日索引:
def number_of_banners
10
end
def daily_banner_index(date = Date.today)
Random.new(date.jd).rand(number_of_banners)
end
daily_banner_index
#=> 8
或数组中随机的每日元素:
def banners
%w(foo_banner bar_banner baz_banner)
end
def daily_banner(date = Date.today)
banners.sample(random: Random.new(date.jd))
end
daily_banner
#=> "bar_banner"