2013-03-26 12 views
8

私は、レールのArray.someに相当することをしたいと思います。ruby​​/railsのArray.someと等価です

ここでは、より複雑なinclude?(私は*argsにこれを適用する)の一種である私のユースケースに適用した例だ:私はary.mapでこれを行うことができ

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.drop_whileを使用して空の配列を返すかどうかを確認することもできますが、再度結果をテストする必要があります。 私はary.bsearchも見たことがありますが、要素の順序についてはあまり理解できない奇妙な制限があります。

私は何かを見逃しましたか?簡単な方法はありませんか?私はruby2とレール4(エッジ)を使用しています。

+0

出力はどのようにする必要がありますか? – Linuxios

+0

出力をコメントとしてコードに追加しました。 'ary.some'はユースケースで真実を示すべきである – Crystark

答えて

12

Javascript Array.prototype.someは、Ruby Enumerable#any?です。あなたが本当にsome?を探している場合

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

まさに私が探していたもの。私はEnumerableを知らなかった!どうもありがとう ! – Crystark

0

あなたはこれがあなたに要素の一部が設定されている場合にのみtrueではなく、すべてを与えるだろう、この

module Enumerable 
    def some? 
    self.any? && !self.all? 
    end 
end 

ような何かをしたいかもしれません。

ここでスニペットを確認してくださいhttps://coderwall.com/p/wcgj2w

+0

'Array.some'は、すべての要素が真であればfalseを返しません。 – tokland