在 Ruby 中一行打印数组元素
Printing elements of array in one line in Ruby
我有以下 Ruby 哈希:
hash = {
0 => "
===
@@@
@ @
@ @
@ @
@@@
===",
1 => "
=
@
@
@
@
@
="}
我想在控制台的一行中打印出一些散列值。
为此,我创建了一个数组,其中包含我想要打印的元素:
test = [hash[0], hash[1]]
或
test1 = [hash[0], hash[0]]
如果我想将 test1
打印到控制台,结果应如下所示:
======
@@@@@@
@ @@ @
@ @@ @
@ @@ @
@@@@@@
======
如果我想将 `test2 打印到控制台,结果应该是:
====
@@@@
@ @@
@ @@
@ @@
@@@@
====
但是,当我使用puts
或print
时,结果总是打印一个接一个,不在同一行。
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")
.
您需要先创建一个二维结构才能得到想要的结果。
我建议采取以下步骤:
解构你的 hash
中的值
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)
=>
====
@@@@
@ @@
@ @@
@ @@
@@@@
====
希望对您有所帮助。
我有以下 Ruby 哈希:
hash = {
0 => "
===
@@@
@ @
@ @
@ @
@@@
===",
1 => "
=
@
@
@
@
@
="}
我想在控制台的一行中打印出一些散列值。 为此,我创建了一个数组,其中包含我想要打印的元素:
test = [hash[0], hash[1]]
或
test1 = [hash[0], hash[0]]
如果我想将 test1
打印到控制台,结果应如下所示:
======
@@@@@@
@ @@ @
@ @@ @
@ @@ @
@@@@@@
======
如果我想将 `test2 打印到控制台,结果应该是:
====
@@@@
@ @@
@ @@
@ @@
@@@@
====
但是,当我使用puts
或print
时,结果总是打印一个接一个,不在同一行。
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")
.
您需要先创建一个二维结构才能得到想要的结果。
我建议采取以下步骤:
解构你的
中的值hash
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)
=>
==== @@@@ @ @@ @ @@ @ @@ @@@@ ====
希望对您有所帮助。