在Array中查找值

Luc*_*nan 110 ruby

如何使用Ruby 1.8.7在Array中找到值?

Mar*_*ing 112

我猜你正试图找出数组中是否存在某个值,如果是这种情况,你可以使用Array #include?(value):

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

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

  • 我会使用 Array#index,但检查 Ruby Array API 是一个很好的提示。 (2认同)

Wil*_*ner 70

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

array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
Run Code Online (Sandbox Code Playgroud)

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

found = array.select {|e| e == 3}.first
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我知道“Enumerable#select”,但“#detect”正是我正在寻找的。 (2认同)
  • `array.select{}` 将遍历数组中的所有元素,查找与条件匹配的元素。相反,“array.find”将返回与条件匹配的第一个元素。所以最好使用 `array.find{ |e| e == 3 }` 然后 `array.select{ |e| e == 3 }.first` (2认同)
  • “Enumerable#find”显然是“Enumerable#detect”的别名 (2认同)

Ewa*_*odd 23

像这样?

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]               #=> []
Run Code Online (Sandbox Code Playgroud)

或者像这样?

a = [ "a", "b", "c" ]
a.index("b")   #=> 1
a.index("z")   #=> nil
Run Code Online (Sandbox Code Playgroud)

请参阅手册.


and*_*dyp 21

你可以使用Array.selectArray.index来做到这一点.


fan*_*ing 18

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

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

6.in?
Run Code Online (Sandbox Code Playgroud)

要查找数组中是否存在值,除了#includes?,您还可以使用#in?ActiveSupport,它适用于任何响应的对象#include?:

arr = [1, 6]
6.in? arr
#=> true
Run Code Online (Sandbox Code Playgroud)

  • @Ross Attrill 不,它在“Enumerable”中,https://ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find (2认同)
  • 我错误地认为 ruby​​-doc 显示包含和继承的方法。对我来说很重要的一课。 (2认同)

Wim*_*dse 15

使用:

myarray.index "valuetoFind"

这将返回您想要的元素的索引,如果您的数组不包含该值,则返回nil.


Mik*_*e S 9

这个答案适用于每个人,他们认识到已接受的答案并未解决目前所写的问题.

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

已经有一个使用示例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]
Run Code Online (Sandbox Code Playgroud)


myd*_*rms 8

我知道这个问题已经得到了解答,但我来到这里寻找一种基于某些标准过滤数组中元素的方法.所以这是我的解决方案示例:使用select,我发现Class中以"RUBY_"开头的所有常量

Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
Run Code Online (Sandbox Code Playgroud)

更新:与此同时,我发现Array#grep工作得更好.对于上面的例子,

Class.constants.grep /^RUBY_/
Run Code Online (Sandbox Code Playgroud)

做了伎俩.