在Ruby中,如何找到数组中的值?
在Ruby中,如何找到数组中的值?
Answers:
我猜您正在尝试查找数组中是否存在某个值,如果是这种情况,则可以使用Array#include?(value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
如果您还有其他意思,请检查Ruby Array API
使用Array#select
将为您提供一系列符合条件的元素。但是,如果您正在寻找一种将元素从符合您条件的数组中取出的方法,那Enumerable#detect
将是更好的选择:
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
否则,您将不得不做一些尴尬的事情:
found = array.select {|e| e == 3}.first
Enumerable#select
但#detect
正是我想要的。
array.select{}
将遍历数组中所有符合条件的元素。array.find
相反,它将返回与条件匹配的第一个元素。所以最好使用array.find{ |e| e == 3 }
然后array.select{ |e| e == 3 }.first
.find_index
我不知道是否有.find
如果要从数组中找到一个值,请使用Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
也可以看看:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
要查找数组中是否存在值,还可以#in?
在使用ActiveSupport时使用。#in?
适用于对以下对象作出响应的任何对象#include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
在Ruby参考中看不到任何内容。既然别人已经提到过,那一定是Rails的事情。嗯....
Enumerable
, ruby-doc.org/core
像这样?
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] #=> []
还是这样?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
您可以使用Array.select或Array.index来做到这一点。
用:
myarray.index "valuetoFind"
这将返回所需元素的索引,如果数组不包含该值,则返回nil。
该答案适用于意识到接受的答案并不能解决当前编写的问题的每个人。
该问题询问如何在数组中查找值。接受的答案显示了如何检查数组中是否存在值。
已经有一个使用的示例index
,因此我提供了使用该select
方法的示例。
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
在2009年已经提供了答案,但您确实提供了一个示例片段,它要好一些。因此,在重新考虑之后,我撤回了我先前所说的内容。
我知道这个问题已经得到了回答,但是我来到这里是在寻找一种基于某些条件过滤数组中元素的方法。所以这是我的解决方案示例:使用select
,我发现Class中所有以“ RUBY_”开头的常量
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
更新:同时,我发现Array#grep的效果更好。对于以上示例,
Class.constants.grep /^RUBY_/
做到了。
Class.constants.grep /^RUBY_/
也可以做到。
感谢您的答复。
我确实是这样的:
puts 'find' if array.include?(value)