Ruby:使用“OR”的“索引”方法

时间:2010-01-29 00:05:19

标签: ruby

使用索引方法,我试图找到一个值是否存在使用某个变量,如果该变量不存在,那么尝试另一个变量;这样的事情(下面的第3行):

a = [ "a", "b", "c" ]
a.index("b")   #=> 1
a.index("z" or "y" or "x" or "b")   #=> 1

..意思是如果在数组中找不到“z”,则尝试“y”;如果找不到y,那么试试x;如果找不到x,那么试试b

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

取决于您的最终目标。如果您只想查看a是否包含zyxb,您可以执行以下操作:

(a & %w{z y x b}).length > 0   # gives true if a contains z, y, x and/or b.

我们正在做的是查看是否存在集交集,其中a包含具有所需数量集的一些共享元素,然后测试以查看是否存在任何这些元素。

答案 1 :(得分:2)

TIMTOWTDI。但我更喜欢使用Array#inject。

%w(x y z b).inject(nil) { |i, e| i or a.index(e) } #=> 1

还有一种方法可以做到这一点,更类似于你的伪代码。

class String
  def | other
    ->(e) { self==e || other==e }
  end
end

class Proc
  def | other
    ->(e) { self.call(e) || other==e }
  end
end

a.index(&('x' | 'y' | 'z' | 'b')) #=> 1