2013-03-26 51 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