ruby-on-rails - 有没有更短的方法来编写这种哈希合并?
问题描述
我有两个哈希。第一个哈希应该优先。nil
只有当它是或空白时,它才应该被第二个哈希覆盖。
main_hash.merge!(option_hash) do |key, main_hash, option_hash|
main_hash.presence || option_hash.presence
end
解决方案
使用您的代码,这很好,但对块和较短的块变量使用花括号。你不需要第二个presence
main_hash.merge!(option_hash){|_k, h1, h2| h1.presence || h2}
#merge!
(and #merge
) with a block 仅调用该块来处理两个哈希中都存在键的情况。在option_hash
中不存在键的情况main_hash
下,只需插入键/值对。
您可以使用#merge!
with 块来做一些巧妙的技巧,例如设置哈希值的组合总数。
hash_1 = {a: 1, b: 1, c: 1}
hash_2 = {b: 1, c: 1, d: 1}
hash_1.merge!(hash_2{|_k, v1, v2| v1 + v2}
=> {:a => 1, :b => 2, :c => 2, :d => 1}
推荐阅读
- python - 我必须删除文本文件中的特定行
- memory-leaks - 以太坊 geth:内存不足
- sql - 默认隐式参数 SQL
- oauth - MS OAuth 2.0 不适用于多因素身份验证
- python - 合并具有相似工作的excel文件和文本文件
- spring - PrincipalExtractor 和 AuthoritiesExtractor 没有命中
- react-native - 在组件中定义 NavBar 的右键,而不是在场景中(react-native-router-flux)
- python - 相当于Python中R的qqplot
- python-3.x - 如何使用flask检查每个文件夹是否有特定文件并使用jinja2显示结果?
- sql - 如何使用 SQL Server 创建算法