2013-03-26 58 views
8

我想在rails中做相當於Array.some的操作。相當於在ruby/rails中的Array.some

這裏的應用到我的用例,其中一個例子是一種更復雜的include?(我想這適用於*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(邊緣)。

+0

你可以給出什麼輸出應該是什麼? – Linuxios 2013-03-26 16:37:56

+0

我在代碼中添加了輸出作爲註釋。 'ary.some'應該在該用例中輸出true – Crystark 2013-03-26 16:48:06

回答

0

如果你真正需要的some?你可能想是這樣的

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

這會給你true只有某些元素的設置而不是全部。

看看這裏的代碼https://coderwall.com/p/wcgj2w

+0

如果所有元素均爲true,則Array.some不返回false。 – tokland 2018-02-07 22:11:36