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']、この平日の平日の平日を返します最初だけでなく、配列ごとに何かを処理したい。

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 に答える