Techioz Blog

Ruby/Rails の Array.some に相当

概要

RailsでArray.someと同等のことをしたいと思います。

これは、より複雑なインクルードのような私のユースケースに適用された例です。 (これを *args に適用したい):

ary = [:a, :b, :c, d: :x, e: :y] # => [:a, :b, :c, { :d => :x, :e => :y }]
search = :e
contained = ary.some { |x|
  x == search || x.try(:key?, search)
} # => true
assert contained, "We should have found #{search}"

ary.map を使用してこれを行うこともできますが、配列全体を調べてからその内容を再度テストすることになります。 ary.drop_while を使用して、空の配列が返されるかどうかを確認することもできますが、やはり結果をテストする必要があります。 ary.bsearch も見たことがありますが、要素の順序についてはよく理解できない奇妙な制限がいくつかあります。

何かを見逃したでしょうか?それを行う簡単な方法はありませんか?私はruby2とrails 4(edge)を使用しています。

解決策

Javascript Array.prototype.some は、Ruby Enumerable#any? と同等です。

["1", "2", "3"].any? { |x| x.to_i == 2 } #=> true