備忘録的な何か

技術ブログ的な何かです

compactしないで、nilを含む配列からnilではない最初の要素を取得する方法

表題どおり。

arr = [nil,"hoge","fuga"]という配列があり、nilではない最初の要素を取得したい場合、私は以下のようにしていた。

 

arr.compact.first #=>"hoge"

 

コードゴルフ的に言えば18byteなので、あまりいただけない。(firstではなく、[0]でアクセスするのは、から配列の時に例外が起きてしまうのでNG)

 

ということで、findを使って、取得する。

arr.find{|x|x} #=>"hoge"

 

実は、falseが配列にあるとその要素もskipしてしまうが、nilまたはfalse以外の最初の要素を取得するということで。