Jum*_*ton 8 ruby arrays zip transpose
他们似乎做同样的事情.
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"}, {:x=>"X"}], [{:b=>"B"}, {:y=>"Y"}]]
Run Code Online (Sandbox Code Playgroud)
为什么有两种方法?
Aru*_*hit 12
#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]]
Run Code Online (Sandbox Code Playgroud)
那应用#transpose方法a,b应该是相同的大小.但对于应用#zip,它不需要b是同样大小的a,即b和a可以是任意大小的.
使用#zip,结果数组大小将始终是self.由此#transpose产生的数组大小将是内部数组的任何大小self.