如果0
在搜索哈希数组时出现空白,我将如何处理返回select
?
我有以下几行在哈希数组中查找created
键:
array.select{|key| key[:created] == Date.yesterday }.first[:amount]
然后,它在找到记录时返回amount
键。
问题是,如果找不到key[:created] == Date.yesterday
的记录,那么我会收到此错误:
undefined method '[]' for nil:NilClass
以下是哈希数组的样子:
[
{:created=>"2014-01-20", :amount=>123},
{:created=>"2014-01-21", :amount=>456},
{:created=>"2014-01-22", :amount=>789}
]
答案 0 :(得分:3)
您可以使用find
代替select
,find
返回满足该块的可枚举中的第一个对象:
found = array.find { |hash| hash[:created] == Date.yesterday }
amount = found ? found[:amount] : DEFAULT_VALUE
如果您使用的是Rails,则可以使用try
方法:
array.find { |hash| ... }.try(:[], :amount)
更新:请注意,String
和Date
之间的比较注定要失败,您必须将日期转换为格式正确的字符串,反之亦然。在我的示例中,我假设hash[:created]
是Date
对象。
答案 1 :(得分:0)
我使用的习语是
res = array.select{|key| key[:created] == Date.yesterday }
res.blank? ? nil : res.first[:amount]
当然,它不是一个漂亮的衬垫,但它防御零。我认为blank?
是主动支持的一部分,但你可以轻松自己动手。