2016-05-19 16 views
2

2次元配列をループし、与えられた条件(この場合は要素値== 1)に従う要素の座標を返すメソッドをプログラムしようとしています。2次元配列の値を評価して座標を返す

def eval(array) 
    array.each_index do |x| 
    x.each_index do |y| 
    if array[x][y] == 1 then 
     puts "X: #{x} Y: #{y}" 
    end 
    end 
end 
end 

array = [ 
[1, 0, 0, 0], 
[0, 1, 0, 0], 
[1, 0, 0, 1], 
[0, 1, 0, 0] 
] 
eval(array) 

私はこのエラーを取得しています:

起こっかもしれないもの上の任意のヒント
block in eval': undefined method `each_index' for 0:Fixnum (NoMethodError) 

+3

'eval'は既存のメソッドと矛盾するのでここでは関数の良い名前ではありません。 – tadman

答えて

4
array.each_index do |x| 

このインデックスをx変数に取り込み、numberにeach_indexを使用しようとしています。すなわち、この問題を修正

x.each_index do |y| 

は私たちに機能を提供します:予想通り

def findMatchingCords(array) 
    array.each_index do |x| 
    array[x].each_index do |y| 
    if array[x][y] == 1 then 
     puts "X: #{x} Y: #{y}" 
    end 
    end 
end 
end 

今findMatchingCords(配列)は

X: 0 Y: 0 
X: 1 Y: 1 
X: 2 Y: 0 
X: 2 Y: 3 
X: 3 Y: 1 

が得られます。

+0

ありがとうございました!これは間違いなく機能しています。私はこれらのeach_indexループで何をループしているのか、もっと意識しています。私はメソッド名の変更についてのアドバイスも考慮に入れています。 –

1

Matrixクラスを使用できます。

require 'matrix' 

def evaluate(array) 
    Matrix[*array].each_with_index { |e,x,y| puts "X: #{x} Y: #{y}" if e == 1 } 
end 

evaluate(array) 
X: 0 Y: 0 
X: 1 Y: 1 
X: 2 Y: 0 
X: 2 Y: 3 
X: 3 Y: 1 
+0

これもかなり便利です、ありがとうございました。私はむしろ他の構成を使用していますが、現時点では私にとっては自然なように見えます。私はRubyを使い始めました。私はまだ「rubysh」のように考えています。 –

関連する問題