开发者社区> 问答> 正文

检查Ruby中的数组中是否存在值

我有一个值'Dog'和一个数组['Cat', 'Dog', 'Bird']。

如何检查它是否存在于数组中而不遍​​历它?有没有简单的方法检查值是否存在,仅此而已?

展开
收起
保持可爱mmm 2020-01-08 17:21:12 525 0
1 条回答
写回答
取消 提交回答
  • 有一种in?方法在ActiveSupport(滑轨的一部分),因为V3.1,如通过@campaterson指出。因此,在Rails中,或者,如果您可以require 'active_support',您可以编写:

    'Unicorn'.in?(['Cat', 'Dog', 'Bird']) # => false

    OTOH,Ruby本身没有in运算符或#in?方法,即使以前已经提出过,特别是由红宝石核心的顶尖成员远藤裕介提出的。

    如其他人指出的那样,反向方法include?存在,所有Enumerable小号包括Array,Hash,Set,Range:

    ['Cat', 'Dog', 'Bird'].include?('Unicorn') # => false

    请注意,如果您的数组中有很多值,则将一个接一个地检查所有值(即O(n)),而对哈希的查找将是固定时间(即O(1))。因此,例如,如果数组是常量,则最好使用Set。例如:

    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?...

    问题来源于stack overflow

    2020-01-08 17:21:36
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载