配列から値を見つける


124

Rubyでは、配列内の値をどのように見つけることができますか?


このタイプの質問でごめんなさい、私はここで初心者です。私はこのツールを使用することを学んでいます。ここに投稿する前に答えを見つけようとします。
Lucas Renan

107
この種の質問について不平を言うすべての人に:FAQを読んでください:「質問はあまりに些細なことでも、「初心者」でもありません」。質問が気に入らない場合は、答えないでください。誰かにそうさせてください。質問がすでにSOで行われ、回答されている場合は、それを重複としてマークしてください。しかし、新人であることを非難する理由はありません。
ブライアンキャンベル

回答:


117

私はあなたが特定の値が配列内に存在するかどうかを見つけようとしていると思います、そしてその場合は、Array#include?(value)を使用できます:

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

他に意味がある場合は、Ruby Array APIを確認してください


1
私はArray#indexを使用しますが、Ruby Array APIをチェックすることは素晴らしいヒントです。
Wylliam Judd 2016

82

を使用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が、まさに私が探していたものです。
ジャスティンアドキンス

1
array.select{}配列内のすべての要素を調べ、条件に一致する要素を探します。array.find代わりに、条件に一致する最初の要素を返します。だから、好ましくは、使用array.find{ |e| e == 3 }後、array.select{ |e| e == 3 }.first
オスカー・ゴンザレス

.find_index 何かあるかどうかわからないと言ったと思います.find
Ross Attrill

25

配列から1つの値を検索する場合は、次を使用します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#findRubyリファレンスには何も表示されません。他の人が言及しているので、Railsのものでなければなりません。
うーん

1
@Ross Attrillいいえ、あるEnumerableruby-doc.org / core
2.7.1 / Enumerable.html#

ruby-docは含まれているメソッドと継承されたメソッドを表示すると誤って想定しました。私にとって重要な教訓。
Ross Attrill

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]               #=> []

またはこのように?

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

マニュアルを参照してください



16

使用する:

myarray.index "valuetoFind"

必要な要素のインデックスを返すか、配列に値が含まれていない場合はnilを返します。


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]

@MarkThomasが私の回答の一部を引用してください。あなたが主張しているのは誤った記述であり、喜んで更新します。ここでは英語を使用していると想定しています(単語の定義ではありません)。そして、何千人もの人々がGoogleで「ruby FIND value in array」を検索すると、最初の結果としてこの質問が表示されるため、誰もが実際に正しい答えを得たいと思います。
マイクS

1
さらに、@ MarkThomas正解である場合、この質問はstackoverflow.com/questions/1986386/…の複製であるためクローズする必要がありますが、配列内の「検索」と「存在の確認」には機能的な違いがあります。
マイクS

私は古い質問を復活させ、実質をほとんどまたはまったく提供しない人々にアレルギーがあります。これはよく起こります。あなたのケースでselectは、2009年に回答としてすでに提供されていましたが、もう少し良いサンプルスニペットを提供しました。考え直した後、先ほど言ったことを撤回します。
マークトーマス

8

この質問には既に回答済みですが、いくつかの基準に基づいて配列内の要素をフィルターする方法を探してここに来ました。これが私の解決策の例です:を使用selectすると、「RUBY_」で始まるクラスのすべての定数が見つかります

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

更新:その間、私はArray#grepがはるかにうまく機能することを発見しました。上記の例では、

Class.constants.grep /^RUBY_/

トリックをしました。


1
その間に、Array#grepの方がはるかにうまく機能することを発見しました。上記の例でClass.constants.grep /^RUBY_/も、トリックを行いました。
mydoghasworms 2014年


1

配列メソッドに行くことができます。

すべての配列メソッドを表示するには、array methodswith functionを使用します。例えば、

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

ちなみに配列内の値をチェックするために別の方法を使用できますa.include?("name")

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.