我正在尝试编写一个循环遍历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)
有关可能发生的事情的任何提示?
答案 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