如何将文本文件读入数组数组(每个子数组是文本文件中的一行?)

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)