首页 > 解决方案 > 如何解决“retrieve_values”问题

问题描述

我正在解决这个问题:

编写一个方法 retrieve_values,它接受两个散列和一个键。该方法应返回一个数组,其中包含与给定键对应的两个哈希值。

def retrieve_values(hash1, hash2, key)
  

end


dog1 = {"name"=>"Fido", "color"=>"brown"}
dog2 = {"name"=>"Spot", "color"=> "white"}
print retrieve_values(dog1, dog2, "name") #=> ["Fido", "Spot"]
puts
print retrieve_values(dog1, dog2, "color") #=> ["brown", "white"]
puts

我想出了一个可行的解决方案:

def retrieve_values(hash1, hash2, key)
  arr = []
  hash1.each { |key| } && hash2.each { |key| }
    if key == "name"
      arr << hash1["name"] && arr << hash2["name"] 
    elsif key == "color"
      arr << hash1["color"] && arr << hash2["color"]
    end
  return arr
end

然后我查看了“官方”解决方案:

def retrieve_values(hash1, hash2, key)
  val1 = hash1[key]
  val2 = hash2[key]
  return [val1, val2]
end

我的代码有什么问题?或者这是一种可接受的“不同”方法?

标签: rubyhash

解决方案


Line with hash1.each { |key| } && hash2.each { |key| }just 什么都不做,即使在您的解决方案中也不需要它。

这部分有点难读arr << hash1["name"] && arr << hash2["name"]。它在一行中对数组进行两次变异,这种样式可能会导致错误。此外,您的代码仅适用于两个键namecolor

dog1 = {"name"=>"Fido", "color"=>"brown", "age" => 1}
dog2 = {"name"=>"Spot", "color"=> "white", "age" => 2}
> retrieve_values(dog1, dog2, "age") 
 => []

官方解决方案将返回[1, 2]

您不需要在这里显式使用return关键字,任何代码块都会返回最后评估的表达式。但这是风格指南的问题。

甚至可以简化官方解决方案:

def retrieve_values(hash1, hash2, key)
  [hash1[key], hash2[key]]
end

推荐阅读