有没有单线或更有效的方法来完成这项工作?

时间:2016-05-28 09:46:01

标签: ruby

给定哈希值,例如:

hash = { "fish" => 2, "cat" => 3, "dog" => 1 }

我需要得到:

  1. 所有值的逗号分隔字符串,例如。 “2,3,1”
  2. 一个整数,用于保存值的总和,例如。 6
  3. 我目前的代码:

    value_string = hash.map { |k,v| "#{v}"}.join(',')
    sum = 0
    hash.map { |k,v| sum += v}
    

2 个答案:

答案 0 :(得分:9)

你可以这样做:

hash.values.join(",") # => "2,3,1"
hash.values.inject(:+) # => 6

答案 1 :(得分:0)

这是一个在单次迭代中计算两个值的解决方案(某种 一个衬里

r1,r2 = hash.reduce([nil, 0]){|m,(_,v)| [[m[0], v.to_s].compact.join(","),m[-1]+v]}
#=> ["2,3,1", 6]