返回某个对象出现在嵌套数组中的索引列表

时间:2013-06-07 02:38:12

标签: ruby multidimensional-array

我试图找出如何形成一个数组,该数组收集特定对象的每个索引(在本例中为单个字母),它出现在嵌套的数组中。例如,使用下面的数组,

boggle_board = [["P", "P", "X", "A"], 
                ["V", "F", "S", "Z"],
                ["O", "P", "W", "N"],
                ["D", "H", "L", "E"]]

我希望像boggle_board.include?("P")之类的东西能够返回嵌套的索引数组[[0,0][0,1],[2,1]]。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

现在没有什么超级优雅能让我想起来。这似乎有效:

def indices_of(board, letter)
  indices = []

  board.each_with_index do |ar, i|
    ar.each_with_index do |s, j|
      indices.push([i, j]) if s == letter
    end
  end

  indices
end

boggle_board = [["P", "P", "X", "A"], 
                ["V", "F", "S", "Z"],
                ["O", "P", "W", "N"],
                ["D", "H", "L", "E"]]

indices_of(boggle_board, "P")
# => [[0, 0], [0, 1], [2, 1]]

答案 1 :(得分:1)

我会使用Matrix#each_with_index。以下代码更具Rubyistic:

require "matrix"
m = Matrix[["P", "P", "X", "A"], 
           ["V", "F", "S", "Z"],
           ["O", "P", "W", "N"],
           ["D", "H", "L", "E"]]
ar = []
m.each_with_index {|e, row, col| ar << [row,col] if e == "P"}
ar #=> [[0, 0], [0, 1], [2, 1]]