2013-04-30 53 views
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'和,我需要循環通過陣列驗證的其餘部分,如果每個日期是工作日或週末,然後過程的東西。如果週末比周末更多,則處理另一件事。

我已經試過這樣:

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']並返回此 平日平日平日 我要處理的東西E各自陣不僅在第一。

+0

聽起來不錯!馬上行動,做到這一點。 (你有什麼問題嗎?你嘗試了什麼,但它不起作用?什麼?) – matt 2013-04-30 17:57:58

+0

我把我的源代碼放在問題中,請看看:) – 2013-04-30 18:02:15

回答

2

您仍然沒有說過問題是什麼,而且您的代碼與您的初始描述非常吻合。但我可以肯定指出,事情在一開始就走錯了地方:

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

想想吧。最初的if調用shift,因此它確實移動了數組。數組的第一個元素現在已經消失了。所以假設它是而不是regular。所以現在我們得到elsif的條件。但我可以告訴你一個事實,這個條件將從不爲真,因爲如果數組的第一個元素是rewards,它現在已經丟失;它已經從數組中移除(第一個元素現在是一個日期)。

因此,在兩種情況下,不要移位,只需檢查line[0]。當需要行走陣列的其餘部分時,您可以稍後移動

+0

這裏還有另外一個問題:在我驗證了第一個元素之後陣列。我如何驗證陣列的其餘部分? – 2013-04-30 18:25:35

+0

如果這是另一個問題,請將其作爲另一個問題! – matt 2013-04-30 18:28:40

相關問題