在Ruby中撤消zip

mat*_*ots 6 ruby

在Python中,我可以通过回放zip来获得zip的"反转"

a = [1,2,3]
b = [4,5,6]
c = zip(a,b) # [(1,4),(2,5),(3,6)]
Run Code Online (Sandbox Code Playgroud)

相反,如果我开始c,我可以ab回用下面的

c = [(1,4),(2,5),(3,6)]
a, b = zip(*c)
Run Code Online (Sandbox Code Playgroud)

但是,在Ruby中,似乎只有一种zip方法,因此我不确定我能以完全相同的方式做到这一点......

在Ruby中是否有某种类似的好习惯用于"解压缩"列表列表?


我知道你可以做到

c[0].zip(*c[1..-1])
Run Code Online (Sandbox Code Playgroud)

基本上在语义上是相同的东西,但这种方式看起来并不那么直观......

Leo*_*rea 10

您可以使用Array#transpose.

a = [1,2,3]
# => [1,2,3]
b = [4,5,6]
# => [4,5,6]
c = a.zip(b) 
# => [[1,4],[2,5],[3,6]]

d, e = c.transpose
# => [[1,2,3], [4,5,6]]
d
# => [1,2,3]
e
# => [4,5,6]
Run Code Online (Sandbox Code Playgroud)