旋转阵列直到满足条件

shi*_*ime 0 ruby ruby-on-rails

我知道如何实现这一目标,但它似乎不是红宝石的做法.

我有一周的天数:

DAYS = {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday"}
Run Code Online (Sandbox Code Playgroud)

(可能有一些铁路助手为此,但我已经用我能想到的最快的方式实现了它)

现在我想创建一个数组,其中第一个元素是今天,其他日子应该保持有序.

这是这个数组

 def day_keys
    # proper sorting of days, start with today and then continue
    day_array = (1..7).to_a
    loop do
      break if day_array.first == Time.now.wday
      day_array.rotate!
    end
    day_array
  end
Run Code Online (Sandbox Code Playgroud)

今天是星期五,所以它会回来[5,6,7,1,2,3,4].在此之后,我使用DAYS散列中的键映射此数组中的值以查找日期名称.

解决方案对我来说似乎很粗糙,所以我想听听一些关于如何实现这一点的想法.我花了一些时间看Array#cycle和Enumerable#inject,但似乎没有适合我的需要.

DGM*_*DGM 5

怎么样: ((Time.now.wday)..(Time.now.wday+6)).collect{|i| ((i-1) % 7) +1}

如果你在轨道上,你还有一些帮手.这会产生一个日期数组:

 ((Time.now.to_date)..(6.days.from_now.to_date)).collect{|i| i}
Run Code Online (Sandbox Code Playgroud)

如果你想要这一天的名字,那只是一个小小的修改

 ((Time.now.to_date)..(6.days.from_now.to_date)).collect{|i| i.strftime "%A"}
Run Code Online (Sandbox Code Playgroud)