2013-04-16 25 views
5

Tôi có một Hash như dưới đây:Làm cách nào để trích xuất các mục thời gian từ một băm?

{"19th Apr, 2013" => :a, "20th Apr, 2013" => :b,"Tomorrow" => :c,"5:00 PM" => :d,"09:25 PM" => :e} 

Tôi muốn đầu ra:

như {"5:00 PM" => :d,"09:25 PM" => :e}

bất cứ ai có thể giúp tôi giải quyết này?

+0

Ra khỏi tò mò - tại sao bạn lại sử dụng một câu hỏi tốt như vậy băm – Noz

+0

@Cyle tốt. Tôi cần nó để thực hiện một số đầu ra trong khi tôi đang sử dụng 'nokogiri' trên trang [' tensports'] (http://www.tensports.com/schedule.php) –

+0

đã làm điều đó giải quyết vấn đề của bạn? – Tilo

Trả lời

6
t = {"19th Apr, 2013" => :a, "20th Apr, 2013" => :b,"Tomorrow" => :c,"5:00 PM" => :d,"09:25 PM" => :e} 

t.select { |k,v| Time.strptime(k,"%H:%M %P") rescue false } 

#=> {"5:00 PM"=>:d, "09:25 PM"=>:e} 
+0

Tôi đánh giá cao việc sử dụng Time.strptime – christianblais

+0

thực sự là xấu - bởi vì theo cách này, bạn chỉ mong đợi một định dạng thời gian cụ thể – Tilo

-2

cách tiếp cận tổng quát hơn:

hash = {"19th Apr, 2013" => :a, "20th Apr, 2013" => :b,"Tomorrow" => :c,"5:00 PM" => :d,"09:25 PM" => :e , "23:23" => :f} 

hash.delete_if{|k,v| k !~ /\d{1,2}:\d\d/} 
    => {"5:00 PM"=>:d, "09:25 PM"=>:e, "23:23" => :f} 

LƯU Ý:

  • này cũng cho phép định dạng thời gian 24 giờ
  • này cũng xử lý các trường hợp khi giờ chỉ là một trong một con số

nếu bạn không muốn xử lý định dạng 24 giờ, sau đó sử dụng:

hash = {"19th Apr, 2013" => :a, "20th Apr, 2013" => :b,"Tomorrow" => :c,"5:00 PM" => :d,"09:25 PM" => :e , "23:23" => :f} 

hash.delete_if{|k,v| k !~ /\d{1,2}:\d\d/ [AaPp][Mm]} # am AM pm PM 
    => {"5:00 PM"=>:d, "09:25 PM"=>:e} 
+1

'/ \ d {1,2}: \ d {2} [AP] M /' có thể là một cụm từ thông dụng tốt hơn;) –

+1

nếu bạn không muốn xử lý định dạng 24 giờ – Tilo

+0

Đúng, chỉ cần thoát khỏi ' [AP] M' rồi. –

0
hash = {"19th Apr, 2013" => :a, "20th Apr, 2013" => :b,"Tomorrow" => :c,"5:00 PM" => :d,"09:25 PM" => :e} 

hash.select { |k, v| k.match /\d{1,2}:\d{2} [AP]M/ } 

Cung cấp cho bạn:

{"5:00 PM"=>:d, "09:25 PM"=>:e}

As far as regex 'hoàn hảo' đi, kiểm tra cuộc chiến regex trong câu trả lời khác ý kiến;)

+0

Tại sao downvote không có bình luận? Tôi sẽ đánh giá cao một số thông tin phản hồi nếu câu trả lời này là sai :) –

+0

Tôi upvoted bạn, chỉ để truy cập số dư downvote. Tôi cũng đánh giá cao thông tin phản hồi về downvotes. – christianblais

Các vấn đề liên quan