如何在多维数组中返回字符串的坐标/索引? [红宝石]

时间:2009-02-14 18:01:45

标签: ruby arrays string multidimensional-array indexing

我有一个多维数组:

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。

这可能吗?

5 个答案:

答案 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

获取展平数组,然后使用索引