数値が配列に含まれているかどうかを確認するルビ関数はありますか?
何かのようなもの:
some_number in?(array)
配列番号が含まれていますか?
my_array.include? 25
in
演算子やメソッドはありませんが、特にruby-core の一流メンバーである遠藤祐介氏によって#in?
以前に提案されました。
他の人が指摘したように、 、 、 、 を含むすべての s に対して、逆の方法が存在include?
しEnumerable
ます。Array
Hash
Set
Range
[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?
を参照して...と比較してください。