我有一个数组:@costumer_request = ['regular', '12/03/2013', '14/03/2013']
。
我需要验证第一项是“常规”还是“奖励”,然后验证阵列其余部分的每个日期是否为周末。
我做了这样的事情:
@costumer_request.each_with_index do |item, index|
if index[0] == 'regular:'
if DateTime.parse(index).to_date.saturday? or DateTime.parse(index).to_date.sunday?
print "It's a weekend"
else
print "It's not a weekend"
end
end
end
require 'date'
module HotelReservation
class Hotel
HOTELS = {
:RIDGEWOOD => 'RidgeWood',
:LAKEWOOD => 'LakeWood',
:BRIDGEWOOD => 'BridgeWood'
}
def weekend?(date)
datetime = DateTime.parse(date)
datetime.saturday? || datetime.sunday?
end
def find_the_cheapest_hotel(text_file)
@weekends_for_regular = 0
@weekdays_for_regular = 0
@weekends_for_rewards = 0
@weekdays_for_rewards = 0
File.open(text_file).each_line do |line|
@costumer_request = line.delete!(':').split
@costumer_request = line.delete!(',').split
#Here I want to process something in each array
#but if I do something like bellow, it will
#store the result of the two arrays in the same variable
#I want to store the result of the first array, process something
#and then do another thing with the second one, and so on.
if(@costumer_request.first == 'regular')
@costumer_request[1..-1].each do |date|
if (weekend?(date))
@weekends_for_regular +=1
else
@weekdays_for_regular +=1
end
end
else
if(@costumer_request.first == 'rewards')
@costumer_request[1..-1].each do |date|
if (weekend?(date))
@weekends_for_rewards +=1
else
@weekdays_for_rewards +=1
end
end
end
end
end
end
end
end
find_the_cheapest_hotel方法应根据给定数据输出最便宜的酒店。
答案 0 :(得分:1)
require 'time'
require 'date'
@costumer_request = ['regular', '28/03/2013', '14/03/2013']
if @costumer_request.first == 'regular'
if @costumer_request[1...-1].all?{|item| Time.local(item).saturday? || Time.local(item).sunday? }
print "It's a weekend"
else
print "It's not a weekend"
end
end
的输出:强> 的
It's a weekend
答案 1 :(得分:0)
require 'time'
def weekend?(date)
datetime = DateTime.parse(date)
datetime.saturday? || datetime.sunday?
end
@costumer_request = ['regular', '28/03/2013', '14/03/2013']
type = @costumer_request.shift
if type == 'regular'
@costumer_request.each do |date|
if weekend?(date)
puts "#{date} a weekend"
else
puts "#{date} not a weekend"
end
end
end
答案 2 :(得分:0)
您也可以直接将weekend?
添加到DateTime:
class DateTime
def weekend?
saturday? || sunday?
end
end
现在你可以将除第一个元素之外的所有元素转换为DateTime对象,然后检查它们是否都在周末。
if @customer_request.first == 'regular'
dates = @customer_request[1..-1].map { |date_string| DateTime.parse(date_string) }
if dates.all?(&:weekend?)
puts 'all dates on a weekend'
else
puts 'at least one date is not on a weekend'
end
else
puts 'not a regular customer request'
end
答案 3 :(得分:0)
这是一种非常干净的方式:
def is_weekend?(dt)
dt.saturday? || dt.sunday?
end
type, *dates = @costumer_request
if(type == 'regular')
dates.each do |date|
if(weekend?(Date.parse(date))
#do processing here
end
end
end
答案 4 :(得分:-1)
@customer_request = ['regular', '12/03/2013', '14/03/2013']
def val
@customer_request.first == 'regular' &&
@customer_request.drop(1).inject(true) do |m, e|
wd = Time.local(*e.split('/').reverse.map(&:to_i))
m &&= (wd.saturday? || wd.sunday?)
end
end
p val
p val ? 'all are weekends' : 'something isn\'t a weekend'