处理矩阵的每个元素中的某些内容并返回一个值

时间:2013-04-30 17:53:25

标签: ruby

我有这样的矩阵:

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',我需要循环遍历数组的其余部分,验证每个日期是工作日还是周末,然后处理一些事情。如果有更多的周末比工作日处理一些事情,否则,处理另一件事。

我试过这个:

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']并返回此信息 平日工作日工作日 我想不仅在第一个数组中处理每个数组的内容。

1 个答案:

答案 0 :(得分:2)

您仍然没有说出问题所在,而且您的代码与初始描述不符。但我当然可以指出一开始就出现问题的地方:

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

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

因此,不要转移,只需在两种情况下检查line[0]。你可以在走完阵列的其余部分时转移以后