我想将数字和输出格式化为四个一组,以便它看起来像这样:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
我做了:
def convert_to_array(str)
arr = str.split(' ')
new_arr = arr.sort_by(&:to_i)
#format(new_arr.to_s)
end
def str
string = <<-_END_
4 6 2 14
15 8 13 1
10 5 9 12
7 11 16 3
_END_
convert_to_array(string)
end
这个输出是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
我使用pp
作为format
方法:
require 'pp'
def format(input)
string = input.to_s
pp string
end
但是输出结果如下:
"[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\
", \"13\", \"14\", \"15\", \"16\"]"
如何将格式设置为将其分为四组,如上例所示?
答案 0 :(得分:4)
您只需要在方法中添加Enumerable#each_slice即可。由于这会返回一个枚举器,因此您需要使用Enumerable#to_a。
def convert_to_array(str)
str.split.sort_by(&:to_i).each_slice(4).to_a
end
convert_to_array(string)
#=> [["1", "2", "3", "4"],
# ["5", "6", "7", "8"],
# ["9", "10", "11", "12"],
# ["13", "14", "15", "16"]]
请注意,没有参数的String#split与split(/\s+/)
相同。
显示结果:
convert_to_array(string).each { |a| puts a.join(' ') }
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
有关
string
#=> " 4 6 2 14\n 15 8 13 1\n 10 5 9 12\n 7 11 16 3\n"
我们计算
a = string.split
#=> ["4", "6", "2", "14", "15", "8", "13", "1",
# "10", "5", "9", "12", "7", "11", "16", "3"]
b = a.sort_by(&:to_i)
#=> ["1", "2", "3", "4", "5", "6", "7", "8", "9",
# "10", "11", "12", "13", "14", "15", "16"]
c = b.each_slice(4)
#=> #<Enumerator: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
# "11", "12", "13", "14", "15", "16"]:each_slice(4)>
c.to_a
#=> [["1", "2", "3", "4"],
# ["5", "6", "7", "8"],
# ["9", "10", "11", "12"],
# ["13", "14", "15", "16"]]
答案 1 :(得分:2)
您可以使用each_slice
def put_slices(array)
array.each_slice(4) do |slice|
puts slice.join(' ')
end
end
put_slices(str)