2012-01-12 10 views
2

は異なる日付を探す:私は次のような配列を持っている時代

[Wed Jan 04 21:56:08 UTC 2012, Thu Jan 12 21:58:36 UTC 2012, Thu Jan 12 22:13:24 UTC 2012, Thu Jan 12 22:13:34 UTC 2012]

のみ、そのアレイ内の個別の日をカウントするRubyでの最良の方法は何ですか? 2012年1月12日は3回まで表示されますが、値が配列に現れた実際の時刻ではなく、月/日/年のみを気にするので、1回だけカウントする必要があります。

フィルタリング後のこの配列の合計数は、2つの別々の月/日/年の値の2の数である必要があります。

答えて

3

これらの文字列またはDateTimeオブジェクトはありますか?

date_arr = datetime_arr.map &:to_date 
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012] 

date_arr.uniq! 
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012] 

date_arr.length 
# => 2 

...後者を想定すると、配列を想定すると、datetime_arrと呼ばれ、私はそれが役に立てば幸い。

+0

より簡潔に: 'dates = times.map(&:to_date).uniq' – Phrogz

0

すでに回答がありますが、項目のリストを繰り返し処理していて、特定のグループごとに(ヘッダーの出力など)何かしたい場合は、便宜のためにEnumerable#group_byを使用する必要があります。

require 'date' 
all_times = 5.times.map{ |i| Time.now + 3600 * 3 * i } 
all_times.sort.group_by(&:to_date).each do |day, day_times| 
    puts "",day,"-"*40 
    day_times.each do |time| 
    puts time.strftime(" * %I:%M%P") 
    end 
end 

#=> 2012-01-12 
#=> ---------------------------------------- 
#=> * 08:56pm 
#=> * 11:56pm 
#=> 
#=> 2012-01-13 
#=> ---------------------------------------- 
#=> * 02:56am 
#=> * 05:56am 
#=> * 08:56am 
関連する問題