我需要创建一个包含许多参数的哈希。如果max_id
参数的值为nil,但我想从哈希中删除密钥:
params = { since_id: since_id, count: 50, max_id: max_id }
params.delete( :max_id ) unless max_id
上面的代码运行正常,但是Ruby有很多很好的哈希和数组运算符,我想知道是否有更简洁的方法来编写它(可能是使用splat运算符的东西)。
答案 0 :(得分:2)
你的解决方案看起来不错,尽管我反过来会这样做:
params = { since_id: since_id, count: 50 }
params[:max_id] = max_id if max_id
答案 1 :(得分:0)
如果您只想检查:max_id
,那么您的解决方案:
params.delete( :max_id ) unless max_id
是最干净的。请注意,如果max_id
为false
,则键值对将被删除,因此我建议您改用以下版本:
params.delete( :max_id ) if max_id.nil?
使用哈希方法,如果值为nil,我可以想到删除键值对的最简洁方法是使用Hash#reject!
:
params.reject! { |k, v| v.nil? }
这将拒绝nil
散列中params
作为值的所有键值对。
还有其他选择。所有以下行都是等效的(除了它们的返回值):
params.reject! { |k, v| v.nil? }
params.select! { |k, v| not v.nil? }
params.delete_if { |k, v| not v.nil? }
答案 2 :(得分:0)
你也可以使用拒绝:
params = params.reject {|key,value| value == nil }