关于ruby:在Array中查找值

Find value in Array

如何使用Ruby1.8.7在数组中查找值?


我猜你是想找出数组中是否存在某个值,如果是这样的话,你可以使用array include?(值):

1
2
3
a = [1,2,3,4,5]
a.include?(3)   # => true
a.include?(9)   # => false

如果您的意思是其他的,请检查Ruby数组API


使用Array#select将为您提供一个符合条件的元素数组。但是,如果您正在寻找一种方法将元素从符合条件的数组中取出,那么Enumerable#detect将是一种更好的方法:

1
2
3
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3

否则你必须做一些尴尬的事情,比如:

1
found = array.select {|e| e == 3}.first


这样地?

1
2
3
4
5
6
7
8
9
10
11
12
a = ["a","b","c","d","e" ]
a[2] +  a[0] + a[1]    #=>"cab"
a[6]                   #=> nil
a[1, 2]                #=> ["b","c" ]
a[1..3]                #=> ["b","c","d" ]
a[4..7]                #=> ["e" ]
a[6..10]               #=> nil
a[-3, 3]               #=> ["c","d","e" ]
# special cases
a[5]                   #=> nil
a[5, 1]                #=> []
a[5..10]               #=> []

或者像这样?

1
2
3
a = ["a","b","c" ]
a.index("b")   #=> 1
a.index("z")   #=> nil

请参阅手册。


您可以使用array.select或array.index执行此操作。


用途:

myarray.index"valuetoFind"

它将返回所需元素的索引,如果数组不包含该值,则返回nil。


如果要从数组中找到一个值,请使用Array#find

1
2
3
4
5
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0}   #=>  6
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]

6.in?

要查找数组中是否存在值(除#includes?之外),在使用activesupport时也可以使用#in?,它适用于对#include?作出响应的任何对象:

1
2
3
arr = [1, 6]
6.in? arr
#=> true


这个答案适用于所有意识到接受的答案并不能像现在写的那样解决问题的人。

问题是如何在数组中查找值。接受的答案显示如何检查数组中是否存在值。

已经有一个使用index的例子,所以我提供了一个使用select方法的例子。

1
2
3
4
1.9.3-p327 :012 > x = [1,2,3,4,5]
  => [1, 2, 3, 4, 5]
1.9.3-p327 :013 > x.select {|y| y == 1}
  => [1]


我知道这个问题已经被回答了,但我来这里是为了寻找一种基于某些条件筛选数组中元素的方法。下面是我的解决方案示例:使用select,我发现类中所有以"ruby"开头的常量

1
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }

更新:同时,我发现数组grep的工作效果更好。对于上述示例,

1
Class.constants.grep /^RUBY_/

做了这个把戏。


谢谢回复。

我确实喜欢这样:

1
puts 'find' if array.include?(value)

您可以使用数组方法。

要查看所有数组方法,请使用带数组的methods函数。例如,

1
2
a = ["name","surname"]
a.methods

另外,您可以使用不同的方法来检查数组中的值您可以使用a.include?("name")