次の形式でデータを受信しています。
{2013-09-13 22:55:56 UTC=>1, 2013-09-15 13:14:19 UTC=>1, 2013-09-16 13:05:39 UTC=>1, 2013-09-16 19:12:44 UTC=>1}
私はgroup
この形に、日ごとにそれらを必要とします:
{2013-09-13=>1, 2013-09-15=>1, 2013-09-16=>2}
Rubyでこれを行う方法は?
次の形式でデータを受信しています。
{2013-09-13 22:55:56 UTC=>1, 2013-09-15 13:14:19 UTC=>1, 2013-09-16 13:05:39 UTC=>1, 2013-09-16 19:12:44 UTC=>1}
私はgroup
この形に、日ごとにそれらを必要とします:
{2013-09-13=>1, 2013-09-15=>1, 2013-09-16=>2}
Rubyでこれを行う方法は?
これも機能します
hsh = {"2013-09-13 22:55:56 UTC"=>1, "2013-09-15 13:14:19 UTC"=>1, "2013-09-16 13:05:39 UTC"=>1, "2013-09-16 19:12:44 UTC"=>1}
hsh.inject(Hash.new(0)) {|h,(k,v)| h[k.to_date.to_s] += v; h}
# => {"2013-09-13"=>1, "2013-09-15"=>1, "2013-09-16"=>2}
.to_s
キーを Date オブジェクトにしたい場合は、 を削除してください。
長い文字列が 1 つだけ与えられた場合:
str = "2013-09-13 22:55:56 UTC=>1, 2013-09-15 13:14:19 UTC=>1,
2013-09-16 13:05:39 UTC=>1, 2013-09-16 19:12:44 UTC=>1"
これはうまくいくでしょう:
result = []
str.scan(/\d\d\d\d-\d\d-\d\d/).group_by {|i| i}.each {|key,value| result << "#{key}=>#{value.size.to_s}"}
result
...に置き換えることgroup_by {|i| i}
ができますgroup_by(&:dup)