我需要创建一个包含许多参数的哈希。如果max_id
参数的值为 nil 虽然我想从哈希中删除键:
params = { since_id: since_id, count: 50, max_id: max_id }
params.delete( :max_id ) unless max_id
上面的代码工作正常,但是 Ruby 有很多不错的哈希和数组运算符,我想知道是否有更简洁的方法来编写它(也许使用 splat 运算符)。
我需要创建一个包含许多参数的哈希。如果max_id
参数的值为 nil 虽然我想从哈希中删除键:
params = { since_id: since_id, count: 50, max_id: max_id }
params.delete( :max_id ) unless max_id
上面的代码工作正常,但是 Ruby 有很多不错的哈希和数组运算符,我想知道是否有更简洁的方法来编写它(也许使用 splat 运算符)。
您的解决方案看起来不错,尽管我会反过来做:
params = { since_id: since_id, count: 50 }
params[:max_id] = max_id if max_id
如果您只想检查,: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? }
你也可以使用拒绝:
params = params.reject {|key,value| value == nil }