0

次の形式でデータを受信して​​います。

{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でこれを行う方法は?

4

3 に答える 3

2

これも機能します

 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 オブジェクトにしたい場合は、 を削除してください。

于 2013-09-18T18:59:20.323 に答える
0

長い文字列が 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)

于 2013-09-18T21:28:12.147 に答える