1

我需要创建一个包含许多参数的哈希。如果max_id参数的值为 nil 虽然我想从哈希中删除键:

params = { since_id: since_id, count: 50, max_id: max_id }
params.delete( :max_id ) unless max_id

上面的代码工作正常,但是 Ruby 有很多不错的哈希和数组运算符,我想知道是否有更简洁的方法来编写它(也许使用 splat 运算符)。

4

3 回答 3

2

您的解决方案看起来不错,尽管我会反过来做:

params = { since_id: since_id, count: 50 }
params[:max_id] = max_id if max_id
于 2013-08-20T14:57:40.547 回答
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? }
于 2013-08-20T14:49:46.553 回答
0

你也可以使用拒绝:

params = params.reject {|key,value| value == nil }
于 2013-08-20T14:55:34.373 回答