评估值并返回二维数组中的坐标

时间:2016-05-19 23:20:32

标签: ruby

我正在尝试编写一个循环遍历2d数组并返回符合给定条件的元素坐标的方法(在本例中为元素值== 1):

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)

有关可能发生的事情的任何提示?

2 个答案:

答案 0 :(得分:4)

array.each_index do |x|

将此索引捕获到x变量中,然后您尝试在数字上使用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

正如所料。

答案 1 :(得分: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