我在Ruby文件中有一个包含日期的哈希数组,我需要能够根据需要使用Ruby搜索和显示哈希值,并使用FROM和TO日期。我怎么能这样做?到目前为止,我不能将日期保留为日期格式以搜索它们。有什么建议吗?
以下是我在搜索之前尝试格式化的内容:
def reporting_display
while true
puts "Please enter a date range (yyyy-mm-dd) FROM and TO"
puts "FROM:"
get_from = gets.chomp
if validate_date(get_from)
@from = Date.parse(get_from)
puts "TO:"
get_to = gets.chomp
if validate_date(get_to)
@to = Date.parse(get_to)
puts "Please wait"
break
else
puts "Invalid input" #may be able to remove this and rely on if from's Invalid input
end
else
puts "Invalid input"
end
end
@from
@to
end
要搜索我尝试过的数据:
def query_sales_csv
CSV.foreach('sales_data.csv', headers: true) do |row|
@sales_from_csv << row
end
@sales_from_csv
@sales_from_csv.each do |order|
if [@from..@to].include?(order[:date])
puts "Date: #{order[:date]} - Units Sold: #{order[:units_sold]} - Gross Profit: $#{order[:gross_profit]} - COGS: $#{order[:cogs]} - Net Profit: $#{order[:net_profit]}"
else
puts "Error: Invalid Range"
end
end
end
答案 0 :(得分:1)
假设您的哈希看起来像这样
dates = [{:name =>"jan", :val => Date.new(2013, 1, 1)}, {:name => "feb", :val => Date.new(2013, 2, 1)}, {:name => "mar", :val => Date.new(2013, 3, 1)}]
然后以下find_all将起作用
earliest = Date.new(2013, 1, 15)
latest = Date.new(2013, 3, 15)
dates.find_all{|h| h[:val] >= earliest and h[:val] <= latest}
更新:现在有代码,行
if [@from..@to].include?(order[:date])
错了,应该是
if (@from..@to).include?(order[:date])
了解为何使用irb来查看
[Date.new(2013, 1, 1)..Date.new(2013, 1, 2)].class # Array
[Date.new(2013, 1, 1)..Date.new(2013, 1, 2)][0].class # Range
VS
(Date.new(2013, 1, 1)..Date.new(2013, 1, 2)).class # Range
您的代码正在检查数组以查看它是否包含日期。它没有,它只包含一个元素,范围。新代码是日期范围。