Ruby: использование метода «index» с «OR» - PullRequest
2 голосов
/ 29 января 2010

Используя метод индекса, я пытаюсь определить, существует ли значение с использованием определенной переменной, и, если эта переменная не существует, попробуйте другую переменную;что-то вроде этого (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 ]

2 голосов
/ 29 января 2010

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
2 голосов
/ 29 января 2010

Зависит от вашей конечной цели. Если вы просто хотите увидеть, содержит ли a z, y, x или b, вы можете сделать это:

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

то, что мы делаем, это проверяет, существует ли множество пересечений , где a содержит некоторые общие элементы с набором требуемых величин, затем проверяется, не было ли таких элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...