Arrays 在Ruby中一行打印数组元素

Arrays 在Ruby中一行打印数组元素,arrays,ruby,hash,printing,puts,Arrays,Ruby,Hash,Printing,Puts,我得到了以下Ruby哈希: hash = { 0 => " === @@@ @ @ @ @ @ @ @@@ ===", 1 => " = @ @ @ @ @ ="} 我想在控制台的一行中打印出一些散列值。 为此,我创建了一个数组,其中包含要打印的元素: test = [hash[0], hash[1]] 或 如果我想将test1打印到控制台,结果应该如下: ====== @@@@@@ @ @@ @ @ @@ @ @ @@ @ @@@@@@ ====== 如果我想将`test2打

我得到了以下Ruby哈希:

hash = {
0 => "
===
@@@
@ @
@ @
@ @
@@@
===",
1 => "
=
@
@
@
@
@
="}
我想在控制台的一行中打印出一些散列值。 为此,我创建了一个数组,其中包含要打印的元素:

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

如果我想将
test1
打印到控制台,结果应该如下:

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

====
@@@@
@ @@
@ @@
@ @@
@@@@
====
但是,当我使用
put
print
时,结果总是一个接一个地打印,而不是在同一行中

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


s[1..-1]
,它会删除
散列[0]
散列[1]
的第一个字符,因为该字符是换行符(
“\n”
)。如果两行
0=>“
===
已经被写入
0=>”===
(类似于
hash[1]
),我可能已经编写了
s.split(“\n”)
,,您需要先创建一个二维结构才能得到想要的结果

我建议采取以下步骤:

  • 解构
    散列中的值

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

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

    第一种情况:

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

    第二种情况:

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


  • 我希望这对您有所帮助。

    您的答案似乎与我先前的答案相同。我遗漏了什么吗?非常感谢你的回答。我已经实现了你的建议,事实上,他们现在正在同一行打印。然而,它们在打印时彼此之间留有一些空间。你可以在这里看到ir:Hi@franciscofcosta,我意识到我在发布后找到了相同的解决方案。我想卡里和我在同一时间输入了我们的答案,他只是更快了:-)。我看不出这些空间是从哪里来的。对我来说,
    test1
    看起来是这样的:
    [“”,“===”、“@@@@@@@“、“@@@@@@“、”@@@@@“、“@@@@@@@@“、“==”)
    (这里没有空格),你能发布你的
    test1吗?检查一下
    ,这样我们就可以反向查找问题了吗?嗨@knugie,谢谢你的回复。我刚刚做了
    test1。检查
    ,我得到了以下信息:
    [“”,“==”,“@@@@@@@”,“@@@”,“@@@”,“@@”,“@@”,“@@@”,“@=”]
    。正如你所看到的,它和你的不完全一样。在数组的第二个和最后一个元素中有空格,我知道问题出在哪里了。在原始帖子中,尾随空格已自动删除。这就是为什么我和卡里没有看到他们。我认为解决这个问题有两个明智的选择。首先,在处理原始的
    散列文件之前,删除其后面的空格。第二,
    strip
    每行的尾随空格如下:
    atomic=hash.values.map{e | e.split(“\n”).map(&:strip)}
    。这有用吗?非常感谢你的回答。我已经实现了你的建议,事实上,他们现在正在同一行打印。然而,它们在打印时彼此之间留有一些空间。你可以在这里看到ir:我不知道你为什么会得到这个结果。我使用您的数据(
    hash
    )和我的代码生成了所需的结果,我显示了这个结果。首先确认您正在使用问题中给出的哈希值
    哈希值
    。如果您还没有这样做,请剪切并粘贴表达式
    hash={…}
    ,然后运行代码。是的,我使用的是完全相同的哈希。当您执行
    a1时,a2=hash.values.map{s | s[1..-1]。split(“\n”)}
    是否得到与我的答案中所示相同的返回值?如果您这样做,您会得到与我显示的
    a1.zip(a1)
    相同的返回值吗?
    atomic = hash.values.map{ |e| e.split("\n")}
    
    [["",
      "===",
      "@@@",
      "@ @",
      "@ @",
      "@ @",
      "@@@",
      "==="
     ], [
      "",
      "=",
      "@",
      "@",
      "@",
      "@",
      "@",
      "="
     ]]
    
    test1 = atomic[0].zip(atomic[0]).map(&:join)
    puts test1
    
    ======
    @@@@@@
    @ @@ @
    @ @@ @
    @ @@ @
    @@@@@@
    ======
    
    test2 = atomic[0].zip(atomic[1]).map(&:join)
    
    ====
    @@@@
    @ @@
    @ @@
    @ @@
    @@@@
    ====