在Ruby中一行打印数组元素

时间:2019-07-30 21:17:28

标签: arrays ruby hash printing puts

我有以下Ruby哈希:

hash = {
0 => "
===
@@@
@ @
@ @
@ @
@@@
===",
1 => "
=
@
@
@
@
@
="}

我想在控制台的一行中打印出一些哈希值。 为此,我创建了一个数组,其中包含要打印的元素:

test = [hash[0], hash[1]]

test1 = [hash[0], hash[0]]

如果我要将test1打印到控制台,结果应为以下内容:

======
@@@@@@
@ @@ @
@ @@ @
@ @@ @
@@@@@@
======

如果我想将`test2打印到控制台,结果应该是:

====
@@@@
@ @@
@ @@
@ @@
@@@@
====

但是,当我使用putsprint时,结果始终是一个接一个地打印而不是在同一行。

2 个答案:

答案 0 :(得分:5)

a1, a2 = hash.values.map { |s| s[1..-1].split("\n") }
  #=> [["===", "@@@", "@ @", "@ @", "@ @", "@@@", "==="],
  #    ["=", "@", "@", "@", "@", "@", "="]] 

puts a1.zip(a1).map(&:join)
======
@@@@@@
@ @@ @
@ @@ @
@ @@ @
@@@@@@
======

puts a1.zip(a2).map(&:join)
====
@@@@
@ @@
@ @@
@ @@
@@@@
====

注意:

a1.zip(a1)
  #=> [["===", "==="], ["@@@", "@@@"], ["@ @", "@ @"], ["@ @", "@ @"],
  #    ["@ @", "@ @"], ["@@@", "@@@"], ["===", "==="]]

a1.zip(a2)
  #=> [["===", "="], ["@@@", "@"], ["@ @", "@"], ["@ @", "@"],
  #    ["@ @", "@"], ["@@@", "@"], ["===", "="]] 

s[1..-1]会丢弃hash[0]hash[1]的第一个字符,因为该字符是换行符("\n")。如果两行0 => "===被写成0 =>"===(与hash[1]类似),我本可以写成s.split("\n")

答案 1 :(得分:3)

您首先需要创建一个二维结构才能获得所需的结果。

我建议执行以下步骤:

  1. 解构hash中的值

    atomic = hash.values.map{ |e| e.split("\n")}
    

    这会给你

    [["",
      "===",
      "@@@",
      "@ @",
      "@ @",
      "@ @",
      "@@@",
      "==="
     ], [
      "",
      "=",
      "@",
      "@",
      "@",
      "@",
      "@",
      "="
     ]]
    
  2. 使用新的数据结构来构建所需的输出

    第一种情况:

    test1 = atomic[0].zip(atomic[0]).map(&:join)
    puts test1
    

    =>

    ======
    @@@@@@
    @ @@ @
    @ @@ @
    @ @@ @
    @@@@@@
    ======
    

    第二种情况:

    test2 = atomic[0].zip(atomic[1]).map(&:join)
    

    =>

    ====
    @@@@
    @ @@
    @ @@
    @ @@
    @@@@
    ====
    

希望您会有所帮助。

相关问题