我想在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 :(得分:16)
Javascript Array.prototype.some是Ruby Enumerable#any?。
["1", "2", "3"].any? { |x| x.to_i == 2 } #=> true
答案 1 :(得分:0)
如果你真的在寻找some?
,你可能想要这样的东西
module Enumerable
def some?
self.any? && !self.all?
end
end
只有在设置了某些元素但不是全部元素时,才会显示true
。
在此处查看代码段https://coderwall.com/p/wcgj2w