Ruby 如何检查一个对象是否在数组中

3

我来自Java世界,所以当发现数组(http://ruby-doc.org/core/classes/Array.html)没有一个方法contains(object)返回bool时感到震惊。

那么,有没有好的方式 - Ruby方式 - 来做到这一点呢?


3
你会发现大多数方法的名称是不同的。 :) - Andres Jaan Tack
4
在提问之前,您可能需要阅读文档,否则您会显得很愚蠢或懒惰,特别是如果您要在问题中链接到文档的话。我的翻译保持了原意,使语言更通俗易懂,不包含任何额外信息。 - Paul Leader
3
抱歉打扰您的宁静,Paul Leader。我在页面上使用“contains”、“bool”(按返回类型获取方法)、“has”等关键词进行了搜索,但没有找到结果。 - Marcel Falliere
1
如果你在发布到SO之前只做了这些,那么这会让你看起来很懒(这就是为什么你的问题评分为0的原因)。我只是建议你如果真的阅读文档,你可能会学到更多。在你发一个问题的时间里,你可以阅读大部分Array类文档,当然还有顶部的方法列表。如果我开始使用Java编码,我不会期望每个类方法都被称为相同的名称,并且能够只通过ctrl-f查找几个术语并假设找不到表示不存在,然后对缺失感到“震惊”。 - Paul Leader
2
保罗:放松。答案通常很明显;这并不意味着我们是白痴。 - Andres Jaan Tack
显示剩余2条评论
4个回答

7

array.include?(obj) → true 或 false

如果给定的对象在数组中存在(即任何对象==给定对象),则返回true,否则返回false。

a = [ "a", "b", "c" ]
a.include?("b")   #=> true
a.include?("z")   #=> false

This, from the Array class documentation:


6
[1,2,3].include? 2
=> true

1
ruby-1.9.2-p0 > [1,2,3].include? 3
 => true 

ruby-1.9.2-p0 > [1,2,3].include? 33
 => false 

大家一开始是不是都读错了问题...我以为问题是“检查一个对象是否为数组” - nonopolarity
是的,我也是。很奇怪,标题完全正确,但我的大脑跳过了“in”。 - Paul Leader
当我们在输入答案的时候,作者是否改变了问题呢?因此问题有一个时间戳,早于我们的回答,所以不会显示修订。 - nonopolarity

0
你可以这样做:
Array.index("ITEM")

如果结果不等于 nil,则该元素存在。

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接