当前位置 : 主页 > 编程语言 > ruby >

数组 – Ruby:从文件中读取整数并将它们放入数组中

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个文件(InputFile.txt)包含整数数字块,每个块使用*字符分割.每个块包含一些行,每行包含三个整数,例如: 4 1233 8 2 55 11 2 4 33 * 3 5 34 2 1 44 6 5 33 * 我想读取每个块并将每个块中的整数放
我有一个文件(InputFile.txt)包含整数数字块,每个块使用*字符分割.每个块包含一些行,每行包含三个整数,例如:

4 1233 8

2 55 11

2 4 33

*

  
  3 5 34
  
  2 1 44
  
  6 5 33
  
  

*

我想读取每个块并将每个块中的整数放在2D数组中并对其进行一些处理.我找到了以下代码:

f = File.read 'InputFile.txt'
f.split('*').each  do |set|
  set.split.map(&:to_i)

这段代码可以读取每个块,但我不知道如何将每个块放在2D数组中.我尝试了例如set [0] [0]并返回4,但是当我尝试设置[0] [1]时它返回空格.谁能告诉我该怎么办?我想看1233作为第二个数字.

f = File.read 'InputFile.txt'
data_array = f.split('*').map  do |block|    
    block.split(/\n+/)
    .map { |e| e.split(/\s+/)
    .map(&:to_i) }
    .reject { |a| a.empty? }
end
# => [[[4, 1233, 8], [2, 55, 11], [2, 4, 33]], 
#     [[3, 5, 34], [2, 1, 44], [6, 5, 33]]]

这适用于由*分隔的任意数量的块.并且,在每个块中,行由任意数量的新行分隔,并且在每行中,整数元素由任意数量的空格分隔.

因为,每个块都是一个图形,并且每行中的三个元素分别代表source_node,dest_node和weight,因此,要访问这些信息,您可以执行以下操作:

data_array.each_with_index do |row, index|
    p "Graph: #{index}"
    row.each do |inner_row|
        p "source_node: #{inner_row[0]}, dest_node: #{inner_row[1]}, weight: #{inner_row[2]}"
    end
    p '- - -'
end

# => "Graph: 0"
# "source_node: 4, dest_node: 1233, weight: 8"
# "source_node: 2, dest_node: 55, weight: 11"
# "source_node: 2, dest_node: 4, weight: 33"
# "- - -"
# "Graph: 1"
# "source_node: 3, dest_node: 5, weight: 34"
# "source_node: 2, dest_node: 1, weight: 44"
# "source_node: 6, dest_node: 5, weight: 33"
网友评论