2017-03-03 21 views
0

は、私はこのようになり、配列の配列を持っていると言う:配列の配列に内部配列内の値があるかどうかを確認するにはどうすればよいですか?

[[1830, 1], [1859, 1]] 

私が何をしたいのかすぐにそれらのいずれかが数1830が含まれているかどうかを確認するために内部の配列をスキャンしています。そうであれば、上記の例の数字1830、別名[1830, 1]を含む配列全体を返したいと思います。私は値の通常の配列のために知って

、私はちょうどarray.include? 1830を行うだろうが、ここで見られるように、それは、ここでは動作しません:

@add_lines_num_start 
#=> [[1830, 1], [1859, 1]] 
@add_lines_num_start.include? 1830 
#=> false 
@add_lines_num_start.first.include? 1830 
#=> true 

を私はそれを行うにはどうすればよいですか?

+1

配列が[[1830,1]、[2,1830]、[3,1492]] 'であり、関心の数が「1830」であったとします。 '[[1830,1]、[2、1830]]は返されますか? –

+0

@CarySwovelandはい、あなたは正しいです。 – marcamillion

答えて

6
a = [[1830, 1], [1859, 1]] 
a.find { |ar| ar.grep(1830) } 
#=> [1830, 1] 

参考文献:

編集1 @Ilyaではなく、あなたが使用することができgrepで配列全体をトラバースのコメントで述べたように

ブール値を返すメソッドo条件に一致するNCE要素が発見された:

a.find { |ar| ar.include?(1830) } 

参考文献:

編集2場合

(臆面もなくOP下ケーリーさんのコメント@から盗まれた)をしますあなたの配列に一致する配列が2つ以上あれば、Enumerable#find_all

を使うことができます
a = [[1830, 1], [1859, 1], [1893, 1830]] 
a.find_all { |ar| ar.include?(1830) } 
#=> [[1830, 1], [1893, 1830]] 
+0

パーフェクト。これはまさに私が探しているものです。ありがとう! – marcamillion

+0

@marcamillion no probs :) –

+1

'include?'は読みやすく、さらに効率的です。この場合は配列全体をスキャンしません。 – Ilya

関連する問題