他们似乎做同样的事情.
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大小.