为什么Ruby在做同样的事情时会有拉链和转置?

前端之家收集整理的这篇文章主要介绍了为什么Ruby在做同样的事情时会有拉链和转置?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
他们似乎做同样的事情.
g = [{ a: "A" },{ b: "B" }]
r = [{ x: "X" },{ y: "Y" }]

g.zip(r)        # => [[{:a=>"A"},{:x=>"X"}],[{:b=>"B"},{:y=>"Y"}]]
[g,r].transpose # => [[{:a=>"A"},{:y=>"Y"}]]

为什么有两种方法

解决方法

#transpose假设self是一个数组数组并转换行和列.

#zip假设self可以是任何Enumerable对象.

这里有更多不同之处

a = [12,11,21]
b = [1,2]

[a,b].transpose # transpose': element size differs (2 should be 3) (IndexError)
a.zip(b) # => [[12,1],[11,2],[21,nil]]
b.zip(a) # => [[1,12],[2,11]]

应用#transpose方法a和b应该具有相同的大小.但是对于应用#zip,不需要b与a的大小相同,即b和a可以是任何大小.

使用#zip,结果数组大小将始终为self的大小.使用#transpose,生成的数组大小将是内部数组的self大小.

猜你在找的Ruby相关文章