puts (Array.new(200) {(1..100).to_a[rand(100)]}).group_by { |x| (x - 1) / 10 }.sort_by { |x| x }.map {|x, y| [10 * x + 1, "-" , 10 * (x + 1), " ", "|", " ", "*" * (y.length)]}
在上面的代码中,我需要在map块中的每个逗号后选择。问题是无论我做什么,我都会得到以下输出:
1
-
10
|
*************************
如何在地图内部进行选择,使其看起来如下所示
1-10 | ********************
答案 0 :(得分:2)
(Array.new(200) {(1..100).to_a[rand(100)]}).group_by { |x| (x - 1) / 10 }.sort_by { |x| x }.map {|x, y| [10 * x + 1, "-" , 10 * (x + 1), " ", "|", " ", "*" * (y.length)]}.collect { |a| a.join }.each { |a| puts a }
但如果您的目标是这样做,为什么要首先创建嵌套数组?
a = Array.new(200) {(1..100).to_a[rand(100)]}
a = a.group_by { |x| (x - 1) / 10 }
a = a.sort_by { |x| x }
a = a.map { |x, y| "#{10 * x + 1} - {#10 * (x + 1)} | #{'*' * (y.length)}" }
a.each { |bag| puts bag }
通过一些清理,维护你的单行:
Array.new(200) { rand(100) + 1 }.group_by { |x| (x - 1) / 10 }.sort.map { |x, y| sprintf "%2d - %3d | %s" % [10 * x + 1, 10 * (x + 1), '*' * y.length] }.each { |l| puts l }
1 - 10 | ********************
11 - 20 | *******************
21 - 30 | *************************
31 - 40 | ***********************
41 - 50 | ****************
51 - 60 | *******************
61 - 70 | *****************
71 - 80 | ****************
81 - 90 | ***********************
91 - 100 | **********************
答案 1 :(得分:0)
你不能在最后创建一个数组但只是一个字符串?
puts (Array.new(40) {(1..20).to_a[rand(20)]}).group_by { |x| (x - 1) / 10 }.sort_by { |x| x }.map {|x, y| %Q!#{10 * x + 1} - #{10 * (x + 1)} | #{"*" * (y.length)}!}
答案 2 :(得分:0)
puts (Array.new(200) {(1..100).to_a[rand(100)]}).group_by { |x| (x - 1) / 10 }.sort.map{|x,y| "#{x*10+1}-#{10*(x+1)} | #{'*'*y.size}" }
顺便说一句,如果您不使用任何特定选项,则无需使用.sort_by { |x| x }
,只需.sort
即可。