How*_*e17 5 ruby arrays split file
所以我在Ruby上几乎是一个n00b,而且我已经整理了一个代码来解决一个MinCut问题(对于一个赋值,是的 - 我已经整理和测试的那部分代码),我不能弄清楚如何读取文件并将其放入数组数组中.我有一个要读取的文本文件,其长度如下所示
1 37 79 164
2 123 134
3 48 123 134 109
我想把它读成一个二维数组,每一行和每一行都是分开的,每一行都进入一个数组.因此,上面示例的结果数组将是:
[[1, 37, 79, 164], [2, 123, 134], [3, 48, 123, 134, 109]]
Run Code Online (Sandbox Code Playgroud)
我阅读文本文件的代码如下:
def read_array(file, count)
int_array = []
File.foreach(file) do |f|
counter = 0
while (l = f.gets and counter < count ) do
temp_array = []
temp_array << l.to_i.split(" ")
int_array << temp_array
counter = counter + 1
end
end
return int_array
end
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!
此外,如果它有帮助,我目前得到的错误是"在read_array中阻塞":私有方法'被'调用#"
我已经尝试了一些东西,但是得到了不同的错误信息......
tes*_*ssi 23
File.readlines('test.txt').map do |line|
line.split.map(&:to_i)
end
Run Code Online (Sandbox Code Playgroud)
说明
readlines读取整个文件并按换行符拆分.它看起来像这样:
["1 37 79 164\n", "2 123 134\n", "3 48 123 134 109"]
Run Code Online (Sandbox Code Playgroud)
现在我们迭代线(使用map)并将每一行拆分为其数字部分(split)
[["1", "37", "79", "164"], ["2", "123", "134"], ["3", "48", "123", "134", "109"]]
Run Code Online (Sandbox Code Playgroud)
这些项仍然是字符串,因此内部map将它们转换为整数(to_i).
[[1, 37, 79, 164], [2, 123, 134], [3, 48, 123, 134, 109]]
Run Code Online (Sandbox Code Playgroud)
Cho*_*ett 11
Ruby只为您提供了几行代码:
tmp.txt
1 2 3
10 20 30 45
4 2
Run Code Online (Sandbox Code Playgroud)
Ruby代码
a = []
File.open('tmp.txt') do |f|
f.lines.each do |line|
a << line.split.map(&:to_i)
end
end
puts a.inspect
# => [[1, 2, 3], [10, 20, 30, 45], [4, 2]]
Run Code Online (Sandbox Code Playgroud)