在Ruby中解开拉链
在Python中,我可以通过返回zip来获得zip的“反向”在Ruby中解开拉链,ruby,Ruby,在Python中,我可以通过返回zip来获得zip的“反向” a = [1,2,3] b = [4,5,6] c = zip(a,b) # [(1,4),(2,5),(3,6)] 如果改为从c开始,我可以使用以下命令返回a和b c = [(1,4),(2,5),(3,6)] a, b = zip(*c) 然而,在Ruby中,似乎只有一个zip方法,因此我不确定我是否可以用完全相同的方法来实现这一点 Ruby中是否有类似的“解压”列表的好习惯用法 我知道你能做到 c[0].zip(*c[1.
a = [1,2,3]
b = [4,5,6]
c = zip(a,b) # [(1,4),(2,5),(3,6)]
如果改为从c
开始,我可以使用以下命令返回a
和b
c = [(1,4),(2,5),(3,6)]
a, b = zip(*c)
然而,在Ruby中,似乎只有一个zip
方法,因此我不确定我是否可以用完全相同的方法来实现这一点
Ruby中是否有类似的“解压”列表的好习惯用法
我知道你能做到
c[0].zip(*c[1..-1])
从本质上来说,语义上是相同的,但这样看起来不那么直观…您可以使用
使用c.transpose.map(&:compact)以防在解压缩缺少相应索引元素时填充nil。@alokan缺少相应索引元素是什么意思?如果您谈论转置不均匀数组,例如,
[[1,2],[3],[4,5]]。转置
,则会产生索引器:元素大小不同(1应该是2)
。因此,除非源代码有nil
元素,否则我认为transpose
的结果不能包含nil
?@DaniëlKnippers如果你有,[1,2,3].zip([4,5])][[1,4],[2,5],[3,nil]
那么[1,4],[2,5],[3,nil].transpose=[[1,2,3],[4,5]输入不正确#compact
将从该结果中删除nil。@LeoCorrea我明白了。但是,如果输入实际上是[4,5,nil]
呢?没有办法知道:)但公平地说,在某些情况下添加compact
可能会很有用@奥雅纳不,我不用维姆,为什么?
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]