我有一个多维数组:
foo = [["a","b","c"], ["d", "e", "f"], ["g", "h", "i"]]
现在我需要反驳“f”的“坐标”,它应该是(1,2)。如何在不知道哪个“行”“f”的情况下执行此操作?我一直在尝试使用索引方法,但这仅在我告诉它在哪里时才有用,即
foo[1].index("f") #=>2
我试过像
这样的东西foo[0..2][0..2].index("f")
但这只会返回nil。
这可能吗?
答案 0 :(得分:4)
循环遍历数组的索引,并在找到所需内容时返回当前路径。这是一个示例方法:
def find2d(array, elem)
array.each_with_index do |row, row_idx|
row.each_with_index do |col, col_idx|
return [row_idx, col_idx] if col == elem
end
end
end
答案 1 :(得分:3)
foo.each_with_index do |item, index|
if item.index('f')
// the array number that 'f' is in
puts "Array number: #{index}"
// the index in that array of the letter 'f'
puts item.index('f')
end
end
答案 2 :(得分:1)
您可能需要遍历数组才能找到该字母,然后打印出该位置。
这更像是一般代码片段而不是实际的ruby。但这个概念就在那里。不知道是否有更好的方法。
for(int i = 0; i < 3; i++ ) {
for(int x = 0; i < 3; x++ ) {
if( foo[i][x] == 'f' ) {
print x, i;
}
}
}
答案 3 :(得分:1)
另一种方式,只是为了娱乐:
y = nil
x = (0...foo.size).find {|xi| y = foo[xi].index("f")}
“y = nil”部分只是在循环之前定义“y”,所以你可以在之后阅读它......
答案 4 :(得分:0)
您可以使用
foo.flatten
获取展平数组,然后使用索引