理解Ruby代码

时间:2017-11-05 10:35:24

标签: ruby

我需要一些帮助来理解下面的ruby代码。

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行创建了一个我认为类似于a的哈希 python中的字典。
  • 第2行循环遍历我的json数据集a添加a 如果没有退出则使用新的键和值对,如果为1则递增计数 确实存在。
  • 第3行是做什么的?

1 个答案:

答案 0 :(得分:1)

您的最后一行只是将所有值转换为String:

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数组创建新的Hash对象。

这两个步骤都是多余的,您只需修改现有的哈希值即可。