如果在数组中找不到项,请使用默认值

时间:2013-01-31 04:10:59

标签: ruby select

所以我的代码试图从一个对象数组中选择一个对象,如果找不到该对象,我想创建我的默认值。

lead_time = lead_times.select{|d| LeadTimeProfile.new unless d.day_of_week == day }

然而,据我所知,这并没有让我失去LeadTimeProfile。

有没有办法做到这一点?或者我说得对吗?

4 个答案:

答案 0 :(得分:3)

  

所以我的代码试图从一个对象数组中选择一个对象,如果找不到该对象,我想创建我的默认值。

查看Enumerable#find

lead_time = lead_times.find{ |d| d.day_of_week == day } || LeadTimeProfile.new

答案 1 :(得分:0)

首先过滤你的数组,然后进行构造

lead_time = lead_times.select {| d | d.day_of_week == day} .map {| d | LeadTimeProfile.new(d)}

答案 2 :(得分:0)

将lambda用作参数也可以。

lead_time = lead_times.find(lambda { LeadTimeProfile.new } ){ |d| d.day_of_week == day }

答案 3 :(得分:0)

这是获得与凯尔(Kyle)发表的结果相同的结果的另一种方法。与使用或门之间没有任何区别,只是可能使链接方法更干净。

day = 2
lead_times.find(-> { LeadTimeProfile.new }) { |p| 
  p.day_of_week == day 
}.day_of_week