Ruby - 将数组拆分为多行

时间:2014-10-15 16:48:53

标签: ruby arrays

我正在尝试制作一个7 x 6游戏板。

行将命名为A到F

列的编号从1到7

所需输出

|| A1 | A2 | A3 | A4 | A5 | A6 | A7 ||
|| B1 | B2 | B3 | B4 | B5 | B6 | B7 ||
|| C1 | C2 | C3 | C4 | C5 | C6 | C7 ||
|| D1 | D2 | D3 | D4 | D5 | D6 | D7 ||
|| E1 | E2 | E3 | E4 | E5 | E6 | E7 ||
|| F1 | F2 | F3 | F4 | F5 | F6 | F7 ||

解决方案可能会使用while循环

letter = "A"
number = 1
while letter < "G"
  puts "|| "
  while number < 8
    puts "#{letter}#{number} |"
    number += 1
  end
  letter = letter.next.ord.chr
  number = 1
end

当我在IRB中运行代码时,我得到以下输出。

||
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
A7 |
||
B1 |
B2 |
B3 |
B4 |
B5 |
B6 |
B7 |
||
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
||
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
||
E1 |
E2 |
E3 |
E4 |
E5 |
E6 |
E7 |
||
F1 |
F2 |
F3 |
F4 |
F5 |
F6 |
F7 |

如何修复此输出,以便每行显示七个字母数组合?

感谢任何帮助

5 个答案:

答案 0 :(得分:3)

这是一种非常混乱的方式。大多数情况下,您应该遍历小集或范围:

('A'..'F').each do |l|
  puts '|| %s ||' % [
    (1..7).collect do |i|
      '%s%d' % [ l, i ]
    end.join(' | ')
  ]
end

构成解决方案的某些部分并将其传递给链条通常是一种更好的策略,而不是让低级别部件进行大量繁重工作。这种方法相当模块化,有很好的定义点可以更改分隔符,单个方块的格式以及整体框架结构。

答案 1 :(得分:3)

(0..41).each do
  |i| y, x = i.divmod(7)
  print x == 0 ? "|| " : " | "
  print %w[A B C D E F][y]
  print x + 1
  print " ||\n" if x == 6
end

答案 2 :(得分:2)

您需要停止换行。在必要时使用print而不是puts

e.g ./

letter = "A"
number = 1
while letter < "G"
  print "||"
  while number < 8
    print " #{letter}#{number} |"
    number += 1
  end
  puts "|"
  letter = letter.next.ord.chr
  number = 1
end

答案 3 :(得分:2)

另一种方式,没有内循环:

combis = %w(A B C D E F).product %w(1 2 3 4 5 6 7)
combis.each_slice(7){|row| puts "|| #{ row.map(&:join).join(' | ') } ||"}

答案 4 :(得分:0)

另一种方式:

def print_it(last_ltr, last_nbr)
  ('A'.."#{last_ltr}").each { |l|
    puts ['||', *(" #{l}1 |".." #{l}#{last_nbr} |").to_a, '|'].join }
end

print_it('F', 7)
|| A1 | A2 | A3 | A4 | A5 | A6 | A7 ||
|| B1 | B2 | B3 | B4 | B5 | B6 | B7 ||
|| C1 | C2 | C3 | C4 | C5 | C6 | C7 ||
|| D1 | D2 | D3 | D4 | D5 | D6 | D7 ||
|| E1 | E2 | E3 | E4 | E5 | E6 | E7 ||
|| F1 | F2 | F3 | F4 | F5 | F6 | F7 ||