2009-11-14 14 views
81

Ruby 1.8.7を使用して配列内の値を見つける方法はありますか?配列内の値を見つける

+0

、私はここで初心者だ、と私は、このツールを使用することを学んでいる、私はみますここに投稿する前に答えを見つけてください。 –

+90

この種の質問に不平を言うすべての人に:FAQを読んでください: '質問はあまりにも些細なものでも初心者でもない'。あなたが質問が好きでないなら、それに答えることはしないでください。その質問がすでに尋ねられ、SOに答えられている場合は、それを必ず重複としてマークしてください。しかし、新しい人たちが新しい人であることを嫌う理由はない。 –

答えて

91

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

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

ますか?他の何かを意味する、Ruby Array API

+1

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

13

用途:

myarray.index "valuetoFind"

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

21

このようにしますか?

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 

See the manual

1

お返事ありがとうございます。

私はこのようでした:

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

私はこの質問が既に回答されているけど、私はいくつかの基準に基づいて、配列内の要素をフィルタリングする方法を探してここに来ました。だからここに私の解決策の一例である:私はそのアレイ#1のgrepは、より良い作品を発見した一方で:selectを使用して、私は「RUBY_」

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

で始まるクラス内のすべての定数はUPDATE見つけます。上記の例では、

Class.constants.grep /^RUBY_/ 

でした。

+1

その間、私はArray#grepがはるかに優れていることを発見しました。上記の例でさえ、 'Class.constants.grep/^ RUBY_ /'はこのトリックを行いました。 – mydoghasworms

8

この回答は、受け入れられた回答が現在書かれているように問題に対処していないことを認識しているすべての人のためのものです。

質問の回答方法は配列内の値です。受け入れられた答えは値が存在するかどうかをチェックする方法を示していますは配列にあります。

すでに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] 
+0

@マークトーマスはあなたの主張が間違っているという私の答えの一部を引用して喜んでそれを更新します。私はここで英語を使っていると仮定しています(言葉の定義を構成していません)。そして、何千人もの人々がGoogleで "ruby FIND value in array"を検索したとき、彼らは最初の結果としてこの質問を見ているので、実際に正しい答えを得るのが大好きだと確信しています。 –

+1

さらに、@ MarkThomasが正しければ、この質問はhttp://stackoverflow.com/questions/1986386/check-if-value-exists-in-array-in-rubyと重複しているので閉じてください。配列内の「発見」と「存在を確認する」との機能的な違い。 –

+0

私は古い質問を復活させ、ほとんどまたはそれ以上の物質を提供してくれる人々にアレルギーです。これはたくさん起こります。あなたのケースでは、2009年に回答として「選択」がすでに提供されていましたが、少し良いサンプルスニペットを提供しました。だから私はそれを再考した後、私が以前に言ったことを撤回する。 –

33

Array#selectを使用すると、条件を満たす要素の配列が得られます。それ以外の場合は

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

あなたのような厄介な何かをする必要があると思います:あなたはあなたの基準を満たしている配列から要素を取得する方法を探しているなら、Enumerable#detectは行くには良い方法だろう

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

あなたは値が#includes?を除き、アレイ内に存在するかどうかを確認するには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? 

を使用し、配列から一つの値を見つけたい場合は、任意のオブジェクトのために働くactivesupportのは、#include?に応答したときにも#in?を使用することができます。

質問のこのタイプのため申し訳ありません
arr = [1, 6] 
6.in? arr 
#=> true 
関連する問題