有没有一种很好的方法(一行)在ruby中编写一个散列,只有在满足条件的情况下才有一些条目?我想到了
{:a => 'a', :b => ('b' if condition)}
但如果条件不满足,剩下:b == nil
个.我意识到这可以很容易地在两行左右的时间内完成,但在一行中就更好了(例如,当将哈希传递给函数时).
我是不是错过了ruby的另一个惊人功能
有没有一种很好的方法(一行)在ruby中编写一个散列,只有在满足条件的情况下才有一些条目?我想到了
{:a => 'a', :b => ('b' if condition)}
但如果条件不满足,剩下:b == nil
个.我意识到这可以很容易地在两行左右的时间内完成,但在一行中就更好了(例如,当将哈希传递给函数时).
我是不是错过了ruby的另一个惊人功能
UPDATE Ruby 2.4+
自ruby 2.4.0以来,您可以使用compact方法:
{ a: 'a', b: ('b' if cond) }.compact
Original answer (Ruby 1.9.2)
可以先创建key=>;的散列;如果不满足条件,则为nil,然后删除值为nil的对.例如:
{ :a => 'a', :b => ('b' if cond) }.delete_if{ |k,v| v.nil? }
yield 率,对于cond==true:
{:b=>"b", :a=>"a"}
对于cond==false
{:a=>"a"}
UPDATE for ruby 1.9.3
这是等效的——更加简洁,使用ruby 1.9.3表示法:
{ a: 'a', b: ('b' if cond) }.reject{ |k,v| v.nil? }