Чавканье внутри массива - PullRequest
0 голосов
/ 31 января 2012
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)]}

В приведенном выше коде мне нужно разбивать после каждой запятой в блоке карты. Проблема в том, что я продолжаю получать следующий вывод независимо от того, что я делаю:

1
-
10

|

*************************

Как я могу проломить карту, чтобы она выглядела следующим образом

1-10    |  ********************

Ответы [ 3 ]

2 голосов
/ 31 января 2012
(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 | **********************
0 голосов
/ 31 января 2012
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 достаточно в вашем случае.

0 голосов
/ 31 января 2012

Вы не можете создать массив в конце, а просто строку?

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)}!}
...