4

私は以下のようなハッシュを持っています:

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

私は出力が欲しい:

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

誰でもこれを解決するのを手伝ってもらえますか?

4

3 に答える 3

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}
于 2013-04-16T21:13:04.343 に答える
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/ }

あなたにあげる:

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

「完璧な」正規表現に関する限り、他の回答のコメントで正規表現戦争を確認してください;)

于 2013-04-16T20:48:45.240 に答える
-2

より一般的なアプローチ:

 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} 

ノート:

  • これにより、24 時間形式の時間も使用できます
  • これは、時間が 1 桁の場合も処理します。

24 時間形式を処理したくない場合は、次を使用します。

 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} 
于 2013-04-16T20:45:18.560 に答える