使用ruby

时间:2017-06-02 01:58:40

标签: ruby random

我正试图让我的网站上的横幅图片每天更换一次。我可以看到ruby有srand,它允许我为日期输入一个数字,并在每次在同一天调用时返回相同的结果,但这会返回一个非常长的数字。我也看到rand让我使用像rand(a..b)这样的范围。

我有什么方法可以使用范围像范围一样使用兰德?

3 个答案:

答案 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"