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