Ruby中hash_selector方法如何实现无参数时返回原哈希?
解决Ruby hash_selector方法的参数为空返回问题
问题分析
你的代码目前在没有传入额外参数时返回空哈希,不符合需求中“返回原hash”的要求,只需要添加一个简单的条件判断就能解决。
修改后的基础实现
def hash_selector(hash, *args) # 当没有额外参数时直接返回原哈希 return hash if args.empty? new_hash = {} args.each do |arg| new_hash[arg] = hash[arg] if hash.has_key?(arg) end new_hash end
简洁优化写法(Ruby 2.5+)
Ruby内置的Hash#slice方法正好能实现筛选指定键的功能,结合三元运算符可以让代码更简洁:
def hash_selector(hash, *args) args.empty? ? hash : hash.slice(*args) end
说明
args.empty?判断是否传入了额外参数,为空则返回原哈希hash.slice(*args)会生成一个新哈希,仅包含原哈希中存在的指定键(不存在的键自动忽略),完全匹配需求中的筛选逻辑
内容的提问来源于stack exchange,提问作者bilal saeed
相关产品推荐
相关产品推荐

