如何在 Ruby 的新行中打印数组的某些元素?

How to print some elements of an array in a new line in Ruby?

我有一个 Ruby 输出数组的脚本:

arr = ["filename1", integer1, integer2, "filename2", integer3, integer4, "filename3", integer5, integer6 ...]

我需要的是这个数组更具可读性;我只想在一行中打印三个元素,所以:

"filename1", integer1, integer2,
"filename2", integer3, integer4,
"filename3", integer5, integer6,

我设法得到了一个数组数组 arr.each_slice(3).to_a:

arr = [["filename1", integer1, integer2], ["filename2", integer3, integer4], ["filename3", integer5, integer6] ...]

但我还是不能让数组的每个数组都打印在单独的一行中。

有办法吗?

理想的输出应该是这样的:

filename1: integer1, integer2
filename2: integer3, integer4
filename3: integer5, integer6

但我知道在 filename 之后添加冒号是另一个问题,我可能不得不使用 join().

第一步确实是.each_slice(3),正如您猜对的那样。我假设 arr 已经是切片数组。

一个简单的选择是用逗号将它们连接在一起。

arr.each do |elements|
   puts elements.join(', ')
end

如果你希望用于连接的字符不同,那么你不能使用连接,但字符串插值很容易。

arr.each do |filename, integer1, integer2|
   puts "#{filename}: #{integer1}, #{integer2}"
end

这将打印字符串内容。如果那是你想要的,你就完成了。如果您还想在字符串周围包含引号,我建议在显示之前对其调用 .inspect

arr.each do |elements|
   puts elements.map(&:inspect).join(', ')
end
arr.each do |filename, integer1, integer2|
   puts "#{filename.inspect}: #{integer1}, #{integer2}"
end

可以使用 [%] 方法格式化数组1

arr.each_slice(3){|trio| puts "%s: %d, %d" % trio}