我有一个值“狗”和一个数组[“猫”、“狗”、“鸟”]。

如何在不循环的情况下检查数组中是否存在它?是否有一种简单的方法来检查该值是否存在?


当前回答

如果要返回值而不仅仅是true或false,请使用

array.find{|x| x == 'Dog'}

如果列表中存在“Dog”,则返回该值,否则为零。

其他回答

array = [ 'Cat', 'Dog', 'Bird' ]
array.include?("Dog")

您正在查找包含项?:

>> ['Cat', 'Dog', 'Bird'].include? 'Dog'
=> true

值得一提的是,Ruby文档是解决此类问题的绝佳资源。

我还要注意您正在搜索的数组的长度。包括?方法将运行一个复杂度为O(n)的线性搜索,这可能会变得非常难看,这取决于数组的大小。

如果您使用的是一个大的(排序的)数组,我会考虑编写一个二进制搜索算法,它应该不会太难,而且最坏的情况是O(logn)。

或者如果您使用的是Ruby 2.0,您可以利用bsarch。

如果你想检查一个街区,你可以试试吗?还是全部?。

%w{ant bear cat}.any? {|word| word.length >= 3}   #=> true  
%w{ant bear cat}.any? {|word| word.length >= 4}   #=> true  
[ nil, true, 99 ].any?                            #=> true  

有关详细信息,请参见Enumerable。

我的灵感来自于“评估数组中是否有任何项目”

如果我们不想使用include?这也适用于:

['cat','dog','horse'].select{ |x| x == 'dog' }.any?