-2

数値が配列に含まれているかどうかを確認するルビ関数はありますか?

何かのようなもの:

some_number in?(array)
4

3 に答える 3

7

配列番号が含まれていますか?

my_array.include? 25
于 2012-05-15T00:32:06.137 に答える
4

include?このメソッドは配列で使用できます。

例:

[1, 2, 3, 4, 5, 6].include?(4)

=> true
于 2012-05-15T00:32:03.500 に答える
2

in演算子やメソッドはありませんが、特にruby​​-core の一流メンバーである遠藤祐介氏によって#in?以前に提案されました。

他の人が指摘したように、 、 、 、 を含むすべての s に対して、逆の方法が存在include?Enumerableます。ArrayHashSetRange

[1, 2, 3].include?(42) # => false

配列に多くの値がある場合、それらはすべて次々にチェックされることに注意してください (つまりO(n))。一方、ハッシュの検索は一定時間になります (つまりO(1))。たとえば、配列が定数の場合は、Set代わりに a を使用することをお勧めします。例えば:

require 'set'
ALLOWED_METHODS = Set[:to_s, :to_i, :upcase, :downcase
                       # etc
                     ]

def foo(what)
  raise "Not allowed" unless ALLOWED_METHODS.include?(what.to_sym)
  bar.send(what)
end

簡単なテストではinclude?、10 個の要素Setを呼び出すと、同等の要素を呼び出すよりも約 3.5 倍高速であることArrayがわかります (要素が見つからない場合)。

最後の締めくくりのメモ: で使用する場合は注意してください。include?微妙Rangeな点があるため、ドキュメントcover?を参照して...と比較してください。

于 2012-05-15T03:23:54.280 に答える