我有一个值“狗”和一个数组[“猫”、“狗”、“鸟”]。
如何在不循环的情况下检查数组中是否存在它?是否有一种简单的方法来检查该值是否存在?
我有一个值“狗”和一个数组[“猫”、“狗”、“鸟”]。
如何在不循环的情况下检查数组中是否存在它?是否有一种简单的方法来检查该值是否存在?
当前回答
在任何数组中查找元素有多种方法,但最简单的方法是“in?”方法
example:
arr = [1,2,3,4]
number = 1
puts "yes #{number} is present in arr" if number.in? arr
其他回答
如果我们不想使用include?这也适用于:
['cat','dog','horse'].select{ |x| x == 'dog' }.any?
这是另一种方法:使用Array#索引方法。
它返回数组中元素第一次出现的索引。
例如:
a = ['cat','dog','horse']
if a.index('dog')
puts "dog exists in the array"
end
index()也可以采用一个块:
例如:
a = ['cat','dog','horse']
puts a.index {|x| x.match /o/}
这将返回数组中包含字母“o”的第一个单词的索引。
如果要返回值而不仅仅是true或false,请使用
array.find{|x| x == 'Dog'}
如果列表中存在“Dog”,则返回该值,否则为零。
在任何数组中查找元素有多种方法,但最简单的方法是“in?”方法
example:
arr = [1,2,3,4]
number = 1
puts "yes #{number} is present in arr" if number.in? arr
值得一提的是,Ruby文档是解决此类问题的绝佳资源。
我还要注意您正在搜索的数组的长度。包括?方法将运行一个复杂度为O(n)的线性搜索,这可能会变得非常难看,这取决于数组的大小。
如果您使用的是一个大的(排序的)数组,我会考虑编写一个二进制搜索算法,它应该不会太难,而且最坏的情况是O(logn)。
或者如果您使用的是Ruby 2.0,您可以利用bsarch。