Join方法不迭代整个数组

时间:2015-04-07 21:12:06

标签: ruby arrays

所以我试图改变我的数组的输出:

------
|*...|
------
|..*.|
------
|....|
------

---------
|*|.|.|.|
---------
|.|.|*|.|
---------
|.|.|.|.|
---------

以下是代码示例

def load_board(file)
  gameboard = File.readlines(file)[1..-1]
  gameboard.map! do |line|
    line.split.map(&:to_s)
  end

  $globalboard = gameboard
end


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


load_board('mines.txt')
pp_board($globalboard)

由于某种原因,似乎row.join('|')方法没有做任何事情,这有什么原因吗?

mines.txt文件的内容是

4 3
*...
..*.
....

1 个答案:

答案 0 :(得分:0)

使用map!

def load_board(file)
    gameboard = File.readlines(file)[1..-1]
    gameboard.map! do |line|
        line.split.map(&:to_s)
    end
    $globalboard = gameboard
end

没有map的简单!不会影响gameboard数组并创建一个新数组。 map!会影响原始数组gameboard。这就是gameboard没有包含分割线的原因。


  

出于某种原因,似乎row.join(' |')方法没有做任何事情,这是否有原因?

line.split将行"*..."拆分为["*..."]。但我认为你希望它被每个角色分开。所以你需要line.split("")。这将产生["*", ".", ".", "."]

.map(&:to_s)也是多余的,因为line.split("")中的分割数组将始终包含字符串。