ruby - 如何解决“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
我的代码有什么问题?或者这是一种可接受的“不同”方法?
解决方案
Line with hash1.each { |key| } && hash2.each { |key| }
just 什么都不做,即使在您的解决方案中也不需要它。
这部分有点难读arr << hash1["name"] && arr << hash2["name"]
。它在一行中对数组进行两次变异,这种样式可能会导致错误。此外,您的代码仅适用于两个键name
和color
:
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
推荐阅读
- javascript - 我们可以在firestore angular中监听特定的键值变化吗
- rust - 从 String Rust 中删除表情符号
- javascript - 当与其他数组数据一起推入状态数组时,按索引添加和删除项目 React
- node.js - 如何通过命令提示符同时使用 npm run watch 和 php artisan serve?
- gitlab - 在 CentOS 上启动 gitlab-runner 注册失败
- ssl-certificate - 仅在 webkit 中使用 Playwright 启动测试 e2e 时出错
- django - 在 Django 中使用类别模型过滤产品
- gstreamer - Gstreamer 警告:无法加载插件 libgstcoreelemets.so
- python - 熊猫取消列出链中的一个数据框列
- python-3.x - 访问依赖树中节点的子节点