2017-11-05 4 views
0

以下のルビーコードを理解する助けが必要です。ルビーコードの理解

counted = Hash.new(0) 
parsed_reponse["result"]["data"].each { |h| counted[h["version"]] += 1 } 
counted = Hash[counted.map {|k,v| [k,v.to_s] }] 
  • 私はライン1は、私はPythonで 辞書に似ていると考えているハッシュをcreats理解しています。
  • 私のjsonデータセットを通る2行目のループは、 が存在しない場合には、新しいキーと値のペアを追加し、1を返します(1 が存在する場合)。
  • 3行目は何をしますか?
+0

[Hash [[key、value]、...]]→new_hash'](https://ruby-doc.org/core-2.4.2/Hash.html#method-c-5B- 5D) - 指定されたオブジェクトが移入された新しいハッシュを作成します。 – axiac

答えて

1

あなたの最後の行は、単なる文字列にすべての値を変換します

Hash[{a: 2, b: 3}.map {|k, v| [k, v.to_s]}] 
#=> {:a=>"2", :b=>"3"} 

私はそれをリファクタリングします:

counted.transform_values!(&:to_s) # for ruby >= 2.4 
#=> {:a=>"1", :b=>"2"} 

または古いバージョンのための:

counted.each { |k, v| counted[k] = v.to_s } 

ので:

  • counted.map {|k,v| [k,v.to_s] }は - 配列
  • Hash[result]の新しい配列を作成 - result配列から新しいハッシュ・オブジェクトを作成します。

両方の手順が冗長なので、既存のハッシュを変更することができます。

+0

.mapのドキュメントはありますか?方法。私はここを見てみました、http://ruby-doc.org/core-2.3.1/Hash.html、しかし何も見つかりませんでした。 – MarcusMaximus

+0

最近のRubyのバージョンでは、 'counted.transform_values!(&:to_s)'と書くことができます。 – Stefan