首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字的输出格式化为每行4

将数字的输出格式化为每行4
EN

Stack Overflow用户
提问于 2016-05-12 18:09:10
回答 2查看 40关注 0票数 0

我想将数字和输出格式化为四组,这样看起来如下:

代码语言:javascript
复制
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

我做了:

代码语言:javascript
复制
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

这方面的产出如下:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

我使用pp作为format方法:

代码语言:javascript
复制
require 'pp'

def format(input)
  string = input.to_s
  pp string
end

但是,它的输出如下:

代码语言:javascript
复制
"[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\
", \"13\", \"14\", \"15\", \"16\"]"

如何修改格式,以便将其分成四组,如上面的示例所示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-12 18:43:06

只需将切片添加到您的方法中即可。因为这会返回一个枚举数,所以您需要对一个进行调整。

代码语言:javascript
复制
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#splitsplit(/\s+/)相同。

要显示结果:

代码语言:javascript
复制
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

代码语言:javascript
复制
string
  #=> "    4 6 2 14\n    15 8 13 1\n    10 5 9 12\n    7 11 16 3\n"

我们计算

代码语言:javascript
复制
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"]] 
票数 4
EN

Stack Overflow用户

发布于 2016-05-12 18:25:58

您可以使用each_slice

代码语言:javascript
复制
def put_slices(array)
  array.each_slice(4) do |slice|
    puts slice.join(' ')
  end
end

put_slices(str)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37194478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档