Ruby,用strings / int替换字符串数组中的值

时间:2015-04-08 03:34:51

标签: ruby arrays

我正在尝试用新数组替换数组,在我继续使用时替换值。

以下是代码:

minesarray = [['*','.','.','.'],['.','.','*','.'],['.','.','.','.']]

def pp_board(board)
    puts Array.new(board[0].size*2+1, '-').join('')
    board.each do |row|
        puts "|" + row.join("|") + "|"
        puts Array.new(row.size*2+1, '-').join('')
    end
end

pp_board(minesarray)

count = 0

minesarray.map{ |row|
    row.each { |col|
        if minesarray[row][col] = '*'
            minesarray[row][col]="a"
        elif minesarray[row][col] = '.'
            minesarray[row][col] = 0
        end
    }
}

我收到以下错误:

mines2.rb:17:in '[]': can't convert Array into Integer (TypeError)
   from mines2.rb:17:in 'block (2 levels) in (main)'
   from mines2.rb:16:in 'each'
   from mines2.rb:16:in 'block in (main)'
   from mines2.rb:15:in 'map'
   from mines2.rb:15:in '(main)'

2 个答案:

答案 0 :(得分:2)

rowcol不是数组的索引,而是元素本身。

你可以这样做:

minesarray = [['*','.','.','.'],['.','.','*','.'],['.','.','.','.']]

def pp_board(board)
    puts Array.new(board[0].size*2+1, '-').join('')
    board.each do |row|
        puts "|" + row.join("|") + "|"
        puts Array.new(row.size*2+1, '-').join('')
    end
end

pp_board(minesarray)

minesarray = minesarray.map { |row|
  row.map { |v|
    if v == '*'
      'a'
    elsif v == '.'
      '0'
    end
  }
}

pp_board(minesarray)

答案 1 :(得分:1)

问题是rowcol不是索引,它们是数组的实际元素。

您还有其他一些问题。 " elif的"应该是elsif并且您在条件中使用了作业(=),您应该使用相等性检查(==)。