Estoy tratando de ingresar texto desde un archivo, ignorandola primera línea y agregando cada carácter a una matriz 2D en un índice separado [[], []]. Hasta ahora puedo agregar los caracteres a su propio índice, pero no puedo eliminar los caracteres de nueva línea con .chomp o etc.
Quiero que mi resultado final sea
[["*",".",".","."]","[".",".","*","."]","[".",".",".","."]]
Así que eso [0][0]
regresará *
por ejemplo, y [0]
regresará *...
Ahora mismo estoy regresando
[["*",".",".",".","n"]","[".",".","*",".","n"]","[".",".",".",".","n"]]
El código en cuestión es:
def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.split("").map(&:to_s)
end
end
origin_board = load_board("mines.txt")
print origin_board
Si intento el siguiente código:
def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.split.map(&:to_s)
end
end
origin_board = load_board("mines.txt")
print origin_board
Terminé con una matriz 2D como:
[["*..."],["..*."],["...."]]
Respuestas
0 para la respuesta № 1Eliminar su entrada debería ayudar:
def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
# ⇓⇓⇓⇓⇓
line.strip.split("").map(&:to_s)
end
end
String#strip
eliminará los espacios en blanco al final de una cadena. La otra opción es no usar. readlines
en favor de read
y split
por $/
(separador de línea):
def load_board(file)
board = File.read(file).split($/)[1..-1].map do |line|
line.split("").map(&:to_s)
end
end
0 para la respuesta № 2
Puedes agregar un .chomp antes del .split, como este:
def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.chomp.split("").map(&:to_s)
end
end
No lo he probado exactamente, pero hizo algunos cambios y debería funcionar. http://repl.it/hgJ/1.