5

PythonがRubyに持っているようなif-inステートメントを探しています。

基本的に、 an_array のxが

これは私が取り組んでいたコードで、変数「line」は配列です。

def distance(destination, location, line)
  if destination and location in line
    puts "You have #{(n.index(destination) - n.index(location)).abs} stops to go"
  end
end
4

5 に答える 5

4
if line.include?(destination) && line.include?(location)

if [destination,location].all?{ |o| line.include?(o) }

if ([destination,location] & line).length == 2

1 つ目は最も明確ですが、DRY は最も少なくなります。

最後の項目は最も明確ではありませんが、確認する項目が複数ある場合は最速です。(O(m+n)O(m*n)です。)

速度が最も重要でない限り、個人的には中間のものを使用します。

于 2013-03-29T21:30:58.930 に答える
2

インクルードを使用するのはどうですか?

def distance(destination, location, line)
  if line.any? { |x| [destination, location].include?(x) }
    puts "You have #{(n.index(destination) - n.index(location)).abs} stops to go"
  end
end
于 2013-03-29T21:27:04.190 に答える
1

Enumerable#include?を使用できますか? -少し見栄えが悪い-または独自の抽象化を作成して、操作についてどのように考えるかを書くことができます。

class Object
  def in?(enumerable)
    enumerable.include?(self)
  end
end


2.in?([1, 2, 3]) #=> true
于 2013-03-29T21:30:52.790 に答える
0

Ruby は集合演算をサポートしています。簡潔/簡潔にしたい場合は、次のことができます。

%w[a b c d e f] & ['f']
=> ['f']

それをブール値に変えるのは簡単です:

!(%w[a b c d e f] & ['f']).empty?
=> true
于 2013-03-29T22:47:13.857 に答える