13

我想在 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,但有一些奇怪的限制,我不太了解元素的顺序。

我错过了什么吗?有没有简单的方法可以做到这一点?我正在使用 ruby​​2 和 rails 4 (edge)。

4

2 回答 2

27

Javascript Array.prototype.some是 Ruby Enumerable#any?.

["1", "2", "3"].any? { |x| x.to_i == 2 } #=> true
于 2013-03-26T16:49:34.697 回答
1

如果你真的在寻找some?你可能想要这样的东西

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

true仅当设置了一些元素但不是全部时,这才会给你。

在此处查看代码段https://coderwall.com/p/wcgj2w

于 2013-11-20T17:33:10.527 回答