0

我有这样的矩阵:

my_matrix = [['regular', '16/03/2009', '17/03/2009', '18/03/2009'],
             ['regular', '20/03/2009', '21/03/2009', '22/03/2009'],
             ['rewards', '26/03/2009', '27/03/2009', '28/03/2009']]

我需要验证第一个元素是“常规”还是“奖励”,并验证第一个元素的每个日期,处理某些内容并返回一个值。

例如:

['regular', '20/03/2009', '21/03/2009', '22/03/2009']

第一个元素是'regular'and,我需要遍历数组的其余部分,以验证每个日期是工作日还是周末,然后处理某些内容。如果周末多于工作日处理某事,否则,处理另一件事。

我试过这个:

HOTELS = {
  :RIDGEWOOD   => 'RidgeWood',
  :LAKEWOOD    => 'LakeWood',
  :BRIDGEWOOD  => 'BridgeWood'
}

def weekend?(date)
  datetime = DateTime.parse(date.to_s)
  datetime.saturday? || datetime.sunday?
end

def find_the_cheapest_hotel(text_file)

   @costumer_request = File.open(text_file){|io| io.each_line.map{|line| line.split(/[:,\s]+/)}}

   @costumer_request.each do |line|

     line.each do |value|
        if line.shift == 'regular' 
          if weekend?(line)
            print 'weekend regular'
          else
            print 'weekday regular'
          end

        elsif line.shift == 'rewards'
          if weekend?(line)
            print 'weekend rewards'
          else
            print 'weekday rewards'
          end
        end
end

它得到这个['regular', '16/03/2009', '17/03/2009', '18/03/2009']并返回这个工作日 weekday weekday 我想不仅在第一个数组中处理每个数组。

4

1 回答 1

1

您仍然没有说出问题所在,并且您的代码与您的初始描述不太匹配。但我当然可以指出事情一开始就出错的地方:

    if line.shift == 'regular'
      # ...
    elsif line.shift == 'rewards'
      # ...
    end

想想看。最初的if调用shift,因此它实际上移动了数组。数组的第一个元素现在永远消失了。所以假设不是 regular。所以现在我们得到了elsif条件。但是我可以告诉你一个事实,这个条件永远不会成立,因为如果数组的第一个元素是rewards,它现在就丢失了;它已从数组中删除(第一个元素现在是日期)。

因此,不要转移,只需line[0]在两种情况下进行检查。您可以稍后移动阵列的其余部分。

于 2013-04-30T18:07:48.343 回答